我正在尝试制作一个将一些按键发送到某个游戏窗口的程序。一个机器人,如果你喜欢。我正在使用带有适当 lParam 的 SendMessage/PostMessage WM_KEYDOWN 和 WM_KEYUP 到该窗口。我尝试过的另一种方法是使用 SendInput。并使用 SetKeyboardState 发送/发布。
问题是所有方法都以相同的方式工作 - 并非总是如此。我的意思是我正在尝试使用计时器每 10 秒将 VK_F9 发送到该窗口。它可以工作3次,或5次,或零次。这意味着在随机发送或发布后它停止工作。但是,如果我在键盘上按 F9,下一个发送就可以了!
那里可能有什么问题?可能有一些我不知道的状态?
提前致谢!
在 C++ 中,我试过这个:
void GenerateKey(int vk, BOOL bExtended) {
KEYBDINPUT kb = {0};
INPUT Input = {0};
/* Generate a "key down" */
if (bExtended) { kb.dwFlags = KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
Sleep(300);
/* Generate a "key up" */
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags = KEYEVENTF_KEYUP;
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
return;
}
在德尔福我用这个:
procedure FKey(Win:THandle; key:integer; special: boolean);
var
lParam: LongInt;
begin
lParam := MakeLong(0, MapVirtualKey(key, 0));
if (special) then
lParam:=lParam or $1000000;
SendMessage(Win,WM_KEYDOWN,key,lParam);
SendMessage(Win,WM_KEYUP,key,$C0000000);
end;
PS:可能是一个线索 - 带有宏的罗技 X7 鼠标工作得很好。