MSDN states that keybd_event has been superceded by SendInput. During a rewrite I switched to using SendInput...which was fine except when trying to send an Alt-key combination. On a Win7 64-bit system (haven't tried elsewhere yet), send an Alt-key causes a long delay before the keystroke is apparent in the target application.
Any ideas why? Or what I've done wrong? For now, I've gone back to keybd_event--the second version below.
//Keyboard input from this version appears only after a ~4-5 second
//time lag...
procedure SendAltM;
var
KeyInputs: array of TInput;
KeyInputCount: Integer;
//--------------------------------------------
procedure KeybdInput(VKey: Byte; Flags: DWORD);
begin
Inc(KeyInputCount);
SetLength(KeyInputs, KeyInputCount);
KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
with KeyInputs[KeyInputCount - 1].ki do
begin
wVk := VKey;
wScan := MapVirtualKey(wVk, 0);
dwFlags := KEYEVENTF_EXTENDEDKEY;
dwFlags := Flags or dwFlags;
time := 0;
dwExtraInfo := 0;
end;
end;
begin
KeybdInput(VK_MENU, 0); // Alt
KeybdInput(Ord('M'), 0);
KeybdInput(Ord('M'), KEYEVENTF_KEYUP);
KeybdInput(VK_MENU, KEYEVENTF_KEYUP); // Alt
SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
end;
//Keyboard input from this version appears immediately...
procedure SendAltM;
begin
keybd_event( VK_MENU, MapVirtualkey( VK_MENU, 0 ), 0, 0);
keybd_event( Ord('M'), MapVirtualKey( Ord('M'),0), 0, 0);
keybd_event( Ord('M'), MapVirtualKey( Ord('M'),0), KEYEVENTF_KEYUP, 0);
keybd_event( VK_MENU, MapVirtualkey( VK_MENU, 0 ), KEYEVENTF_KEYUP, 0);
end;