Как послать нажатие клавиши в какое-нибудь окно?
Материал из DRKB
Как послать нажатие клавиши в какое-нибудь окно?[править | править код]
Эта процедура посылает сообщение о нажатии клавиши.
procedure PostKeyEx32(Key: Word; const Shift: TShiftState; SpecialKey: Boolean);
type
TShiftKeyInfo = record
Shift: Byte;
VKey: Byte;
end;
ByteSet = set of 0..7;
const
ShiftKeys: array [1..3] of TShiftKeyInfo = (
(Shift: Ord(ssCtrl); VKey: VK_CONTROL),
(Shift: Ord(ssShift); VKey: VK_SHIFT),
(Shift: Ord(ssAlt); VKey: VK_MENU)
);
var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
begin
for i := 1 to 3 do
if ShiftKeys[i].Shift in bShift then
keybd_event(ShiftKeys[i].VKey, MapVirtualKey(ShiftKeys[i].VKey, 0), 0, 0);
if SpecialKey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
keybd_event(Key, MapVirtualKey(Key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(Key, MapVirtualKey(Key, 0), flag, 0);
for i := 3 downto 1 do
if ShiftKeys[i].Shift in bShift then
keybd_event(ShiftKeys[i].VKey, MapVirtualKey(ShiftKeys[i].VKey, 0), KEYEVENTF_KEYUP, 0);
end;
Чтобы воспользоваться этой процедурой надо предварительно найти и активизировать нужное окно:
SetForegroundWindow(FindWindow(PChar(WindowClassName), PChar(WindowCaption)));
PS. не забудьте поставить задержки типа Sleep(100) после активизации окна и между посылаемыми клавишами, не то окно может не успевать реагировать на клавиши...
Author: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 01490