MSDN は、keybd_event が SendInput に取って代わられたと述べています。書き換え中に、SendInput を使用するように切り替えました...これは、Alt キーの組み合わせを送信しようとする場合を除いて問題ありませんでした。Win7 64 ビット システム (他の場所ではまだ試していません) では、Alt キーを送信すると、ターゲット アプリケーションでキーストロークが明らかになる前に長い遅延が発生します。
理由はありますか?それとも私が間違ったことをしましたか?とりあえず、keybd_event に戻りました。これは、以下の 2 番目のバージョンです。
//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;