|
|
|
|
Функция
keybd_event() принимает значения до 244 - как мне отправить нажатие клавиши с
кодом #255 в элемент управления Windows?
Это
может понадобится для иностранных языков или для специальных символов.
(например, в русских шрифтах символ с кодом #255 - я прописное). Приведенный
в примере метод, не стоит использовать в случае если символ может быть
передан обычным способом (функцией keybd_event()).
procedure TForm1.Button1Click(Sender: TObject); var KeyData : packed record RepeatCount : word; ScanCode : byte; Bits : byte; end; begin {Let the button repaint} Application.ProcessMessages; {Set the focus to the window} Edit1.SetFocus; {Send a right so the char is added to the end of the line} // SimulateKeyStroke(VK_RIGHT, 0); keybd_event(VK_RIGHT, 0,0,0); {Let the app get the message} Application.ProcessMessages; FillChar(KeyData, sizeof(KeyData), #0); KeyData.ScanCode := 255; KeyData.RepeatCount := 1; SendMessage(Edit1.Handle, WM_KEYDOWN, 255,LongInt(KeyData)); KeyData.Bits := KeyData.Bits or (1 shl 30); KeyData.Bits := KeyData.Bits or (1 shl 31); SendMessage(Edit1.Handle, WM_KEYUP, 255, LongInt(KeyData)); KeyData.Bits := KeyData.Bits and not (1 shl 30); KeyData.Bits := KeyData.Bits and not (1 shl 31); SendMessage(Edit1.Handle, WM_CHAR, 255, LongInt(KeyData)); Application.ProcessMessages; end;
Источник:
Дельфи. Вокруг да
около.
Комментарий от "Aleksey Moiseev"
(moiseev@samara-gsm.ru)
Этот способ не годится, если нельзя получить
handle у Edit-а, в который надо послать сообщение, что бывает, когда вводишь
символы в чужую программу.
Для передачи русских символов в
keybd_event, например, того же 'я', надо сначала переключить раскладку
клавиатуры на русский, а затем вызвать keybd_event, передав ему scan-код
символа. Для переключения раскладки в чужой программе можно делать
так:
var rus,curKey,progKey: HKL; hwProg,progId : THandle; begin // получить handle окна чужой программы hwProg := findWindow('<класс окна>','<заголовок окна>'); // Получить идентификатор чужого процесса progId := GetWindowThreadProcessId(HwProg,nil); SetForegroundWindow(hwProg); SetActiveWindow(hwProg); // Получить ссылку на русскую раскладку rus:=LoadKeyboardLayout('00000419', 0); // Переключить раскладку на русскую ActivateKeyboardLayout(rus,KLF_ACTIVATE); curKey := GetKeyboardLayout(0); // Получить текущую раскладку // Получить текущую раскладку в чужой программе progKey := GetKeyboardLayout(progId); // переключить раскладку в hwProg if progKey <> curKey then begin sendMessage(hwProg,WM_INPUTLANGCHANGEREQUEST,1,curKey); Application.processMessages; // можно вставить задержку, что-нибудь типа delay(1000) из rxlib end;
keybd_event(lo(VkKeyScan('я')),0,0,0); // Ввести символ, например, 'я'
// Таким же образом переключить раскладку обратно ... end;
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|