焦点窗口可以用 SendInput 发送模拟消息,对于非焦点窗口可以用 PostMessage 向指定窗口发送模拟消息。
假设窗口名称为 "Trigger Rally", 模拟发送左方向按键(VK_LEFT)。
代码如下:
void keyPressed(const char* windowName, int keyVirtualCode, bool isPressed) {
WORD scanCode = MapVirtualKey(keyVirtualCode, MAPVK_VK_TO_VSC);
DWORD dwVKFkeyData;
dwVKFkeyData = 1; /* 按下次数 */
dwVKFkeyData |= scanCode << 16; /* 键盘扫描码 */
dwVKFkeyData |= 1 << 24; /* 是否扩展键 */
dwVKFkeyData |= 0 << 29;
UINT hmsg = WM_KEYDOWN;
if (! isPressed) {
hmsg = WM_KEYUP;
dwVKFkeyData |= 3 << 30;
}
HWND hwnd = FindWindow(NULL, windowName);
::PostMessage(hwnd, hmsg, keyVirtualCode, dwVKFkeyData);
}
keyPressed("Trigger Rally", VK_LEFT, true);
觉得有用可以留言哦!!!
附赠一组老外写的方法,原文链接点击