keybd_event()和SendKeys.SendWait()之间有什么区别吗?

时间:2011-02-23 21:12:49

标签: c# sendkeys

SendKeys.SendWait()只是一个包装器,这两个代码片段完全相同吗?

const int VK_ESCAPE = 0x1B;
keybd_event(VK_ESCAPE, 0, 0, 0);
keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);

System.Windows.Forms.SendKeys.SendWait("{ESC}");

如果没有,是否有理由使用其中一个?

2 个答案:

答案 0 :(得分:5)

keybd_event()是一个遗留API,这些天你应该使用SendInput()。 SendKeys使用日记钩子或SendInput,具体取决于.config文件设置。日志挂钩是遗留的,仍然是默认的,SendInput在Vista和更高版本上工作得更好,从.NET 3开始可用。因此,粗略地说,是的,它们是相同的。配置设置为:

<appSettings> 
    <add key="SendKeys" value="SendInput"/> 
</appSettings> 

答案 1 :(得分:1)

System.Windows.Forms.SendKeys的最新版本使用SendInput,但您必须configure才能这样做。 Hans解释了SendKeys的替代日记钩方法。

SendInput是伪造输入的官方认可的API调用。 keybd_event状态的文档:

  

注意此功能已经执行   取代。改为使用SendInput。

您应该使用SendKeys,因为它更容易。