为什么keybd_event在某些情况下不起作用?

时间:2013-12-26 19:25:50

标签: c# pinvoke

我想了解为什么keybd_event在某些上下文中不起作用。例如,它在诸如英雄联盟或ePSXe上的模拟游戏等游戏中不起作用。

以下代码:

Keys key = Keys.Q;

keybd_event((byte)key, 0x45, 0x0001 | 0, 0);
keybd_event((byte)key, 0x45, 0x0001 | 0x0002, 0);

适用于Terraria游戏,但不适用于我之前提及的游戏。

然而,我注意到当我尝试在ePSXe上按 Esc 时,它会回到主窗口。它触发了模拟器上的操作,但它不会触发游戏中的操作。我猜在英雄联盟上也是如此。

为什么它不能正常工作?有没有办法让它发挥作用?

1 个答案:

答案 0 :(得分:1)

此API是低级别的;因此应用程序不会直接响应它。该函数由中断处理程序调用。也许您生成的输入不完全相同,您认为此应用程序需要响应。此外,此API目前已被我建议使用的函数SendInput取代,而不是keybd_event。