我使用以下标准GenerateKey代码:
void GenerateKey ( int vk , BOOL bExtended)
{
KEYBDINPUT kb={0};
INPUT Input={0};
// generate down
if ( bExtended )
kb.dwFlags = KEYEVENTF_EXTENDEDKEY;
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
::SendInput(1,&Input,sizeof(Input));
// generate 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));
}
我调用此函数来模拟箭头键(向上,向下,向左,向右)。但是,这适用于普通的资源管理器窗口和小型Flash游戏。但是,当我在极品飞车或Roadrash等游戏上试用时,它不起作用..这种行为的任何可能原因?
答案 0 :(得分:1)
您的游戏最有可能使用DirectInput,它在较低级别工作,因此您无法使用SendInput()向其注入事件。可能需要键盘filter driver来执行您想要的操作。我做了快速的谷歌搜索,但没有提出任何明确的,但我希望这能让你知道你需要走哪条路。
应该有一个keyboard filter driver sample与WDK(Windows驱动程序工具包),您可以为您的目的修改。这将非常复杂。