MSDN은 keybd_event가 SendInput에 의해 대체되었다고 말합니다. 다시 쓰는 동안 SendInput ...을 사용하여 전환했습니다. Alt 키 조합을 보낼 때을 제외하고는 이었습니다. Win7 64 비트 시스템 (다른 곳에서는 아직 시도하지 않음)에서 Alt 키를 보내면 대상 응용 프로그램에서 키 스트로크가 명백해지기 전에 긴 지연이 발생합니다.SendInput 대 keybd_event
왜 그런가? 아니면 내가 뭘 잘못 했니? 지금은 keybd_event로 돌아갔습니다. 아래 두 번째 버전입니다.
//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;
keybd_event''에이 큰 문제가 귀하의 이벤트가 실제 사람과 접합 얻을 수 있다는 것이다. 그래서'SendInput'이 그 일입니다. 왜 당신은 문제가 있는지 전혀 모르겠다. 아직. –