2011-12-17 124 views

回答

1

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

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

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

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

4

使用的AutoIt!3(这是相当类似AutoHotKeys),你会使用Send()http://www.autoitscript.com/autoit3/docs/functions/Send.htm),但一定要具有游戏窗口活动(WinActivate())在此之前。

我已经用它与第二人生(使用OpenGL)成功交互。您可能需要模拟按键之间的时间段,因为并非所有游戏都实现了良好的键盘缓冲区。

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

如果游戏轮询asynchonously,你要使用的downup修饰符标志:

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

搞清楚如何长时间保持按下的键完全取决于如何频繁地你想程序控制轮询键盘;无法确切知道。

+0

使用AutoIt3,它几乎可以工作,但是如果我直接发送一个命令,如“{LEFT}”。它不是由游戏处理的。我必须在循环中重复发送(“{LEFT}”)十次,即使在这种情况下,游戏也不会处理命令。 – user1026187 2011-12-17 13:05:33

1

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