Как послать нажатие клавиши в какое-нибудь окно?

Previous  Top  Next

    
 

 

Эта процедура посылает сообщение о нажатии клавиши.

 

Code:

procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);

{©Drkb v.3(2007): www.drkb.ru,

®Vit (Vitaly Nevzorov) - nevzorov@yahoo.com}

 

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;

 

 

Чтобы воспользоваться этой процедурой надо предварительно найти и активизировать нужное окно:

Code:

SetForegroundWindow(FindWindow(PChar(WindowClassName), PChar(WindowCaption)));

 

 

PS. не забудьте поставить задержки типа Sleep(100) после активизации окна и между посылаемыми клавишами, не то окно может не успевать реагировать на клавиши...

©Drkb::01490

Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)

 

Взято с Vingrad.ru http://forum.vingrad.ru