Arn*_*old 5 keystroke sendinput
我正在使用以下标准 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));
}
Run Code Online (Sandbox Code Playgroud)
我调用这个函数来模拟箭头键(上、下、左、右)。但是,这适用于普通的资源管理器窗口和小型 Flash 游戏。但是,当我在像极品飞车或 Roadrash 这样的游戏中尝试它时,它不起作用.. 这种行为有什么可能的原因吗?
您的游戏很可能使用 DirectInput,它在较低级别上工作,因此您无法使用 SendInput() 向其注入事件。可能需要键盘过滤驱动程序来执行您想要的操作。我快速谷歌搜索,但没有找到任何明确的信息,但我希望这能让你知道你需要走哪条路。
WDK(Windows 驱动程序工具包)中应该有一个键盘过滤器驱动程序示例,您可以根据自己的目的进行修改。这会很复杂。
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |