|
|
|
|
Есть ли
в Delphi эквивалент функции SendKeys Visual Basic'а?
Ниже
приведена процедура, позволяющаю отправлять нажатия в любой элемент
управления (window control), способный принимать ввод с клавиатуры. Вы
можете использовать эту технику чтобы включать клавиши NumLock, CapsLock и
ScrollLock под Windows NT. Та же техника работает и под Windows 95 для
CapsLock и ScrollLock но не работает для клавиши NumLock. Обратите
внимание, что приведены четыре поцедуры: SimulateKeyDown() - эмулировать
нажатие клавиши (без отпускания) SimulateKeyUp() - эмулировать отпускание
клавиши SimulateKeystroke() - эмулировать удар по клавише (нажатие и
отпускание) и SendKeys(), позволяющие Вам гибко контролировать посылаемые
сообщения клавиатуры. SimulateKeyDown(), SimulateKeyUp() и
SimulateKeystroke() получают коды виртуальных клавиш (virtural key) (вроде
VK_F1). Процедура SimulateKeystroke() получает дополнительный параметр,
полезный при эмуляции нажатия PrintScreen. Когда этот параметр равен нулю
весь экран будет скопирован в буфер обмена (clipboard). Если дополнительный
параметр равен 1 будет скопированно только активное окно. Четыре метода
"button click" демонстрируют использование: ButtonClick1 - включает capslock
ButtonClick2 - перехватывает весь экран в буфер обмена (clipboard).
ButtonClick3 - перехватывает активное окно в буфер обмена (clipboard).
ButtonClick4 - устанавливает фокус в Edit и отправляет в него строку.
Пример:
procedure SimulateKeyDown(Key : byte); begin keybd_event(Key, 0, 0, 0); end;
procedure SimulateKeyUp(Key : byte); begin keybd_event(Key, 0, KEYEVENTF_KEYUP, 0); end;
procedure SimulateKeystroke(Key : byte; extra : DWORD); begin keybd_event(Key,extra,0,0); keybd_event(Key,extra,KEYEVENTF_KEYUP,0); end;
procedure SendKeys(s : string); var i : integer; flag : bool; w : word; begin {Get the state of the caps lock key} flag := not GetKeyState(VK_CAPITAL) and 1 = 0; {If the caps lock key is on then turn it off} if flag then SimulateKeystroke(VK_CAPITAL, 0); for i := 1 to Length(s) do begin w := VkKeyScan(s[i]); {If there is not an error in the key translation} if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then begin {If the key requires the shift key down - hold it down} if HiByte(w) and 1 = 1 then SimulateKeyDown(VK_SHIFT); {Send the VK_KEY} SimulateKeystroke(LoByte(w), 0); {If the key required the shift key down - release it} if HiByte(w) and 1 = 1 then SimulateKeyUp(VK_SHIFT); end; end; {if the caps lock key was on at start, turn it back on} if flag then SimulateKeystroke(VK_CAPITAL, 0); end;
procedure TForm1.Button1Click(Sender: TObject); begin {Toggle the cap lock} SimulateKeystroke(VK_CAPITAL, 0); end;
procedure TForm1.Button2Click(Sender: TObject); begin {Capture the entire screen to the clipboard} {by simulating pressing the PrintScreen key} SimulateKeystroke(VK_SNAPSHOT, 0); end;
procedure TForm1.Button3Click(Sender: TObject); begin {Capture the active window to the clipboard} {by simulating pressing the PrintScreen key} SimulateKeystroke(VK_SNAPSHOT, 1); end;
procedure TForm1.Button4Click(Sender: TObject); begin {Set the focus to a window (edit control) and send it a string} Application.ProcessMessages; Edit1.SetFocus; SendKeys('Delphi Is RAD!'); end;
Источник:
Дельфи. Вокруг да
около.
А теперь у нас есть целый модуль для этого: http://delphi.mastak.com/articles/sendkey.html
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|