如何将键盘输入发送到OpenGL / DirectX游戏窗口?

时间:2011-12-17 11:03:52

标签: windows autohotkey sendkeys

如何在游戏窗口中模拟按键(使用Windows中的任何编程语言)?

AutoHotKeys脚本和.NET SendKeys功能不起作用......

3 个答案:

答案 0 :(得分:4)

使用AutoIt!3(与AutoHotKeys非常相似),您可以使用Send()http://www.autoitscript.com/autoit3/docs/functions/Send.htm),但请务必让游戏窗口处于活动状态(WinActivate())之前你这样做。

我已经用它来成功地与Second Life(使用OpenGL)进行交互。在模拟按键之间可能需要Sleep()个句点,因为并非所有游戏都能实现良好的键盘缓冲。

如果这不起作用,游戏可能直接访问硬件驱动程序,你唯一的选择是挂钩键盘驱动程序。

如果游戏异步轮询,您希望使用downup修饰符标记:

Send("{left down}")  ; hold down the LEFT key
Sleep(10)            ; keep it pressed for 10 milliseconds
Send("{left up}")    ; release the LEFT key

确定按下按键的时间长短完全取决于您尝试控制的程序轮询键盘的频率;没办法确定。

答案 1 :(得分:2)

此键盘wrapper将允许您使用C#模拟游戏或任何其他应用程序中的键盘事件。

答案 2 :(得分:1)

任何编程语言?我的建议是用C或C ++编写一个小应用程序(尽管你也可以在带有P/Invoke的.NET应用程序中执行此操作。)

具体来说,您正在寻找Win32 API中的SendInput function,它可以向应用程序发送低级键盘和鼠标输入。它是根据包含您要发送的信息的INPUT structure执行的。

当然,使用此函数受UIPI的约束,这意味着您注入输入的应用程序必须以与执行注入的应用程序相同或更低的完整性级别运行。

但是,由于此功能通常是SendKeys在封面下使用的功能,因此最后一点需要注意的可能是它无法正常工作。很难准确地说出来;你不要告诉我们你的意思是“不要工作”。