如何从当前 .NET 表单/应用程序发送密钥 F12

2024-05-22

我非常确定以下按钮激活的表单代码应该在我的 C# 应用程序中引发 Control-F12:

SendKeys("^{F12}");

但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序。我的键盘可以用。看起来发送键在某处被拦截,并且没有以实际模拟击键的方式发送。有什么帮助吗?


SendKeys 无法在活动应用程序之外发送密钥。

要真实地模拟整个系统的击键,您需要 P/Invokekeybd_event or SendInput out of user32.dll。 (根据 MSDNSendInput是“正确”的方式但是keybd_event有效并且更易于 P/Invoke。)

示例(我think这些关键代码是正确的...每对中的第一个是VK_代码,第二个是成败键盘扫描代码...“2”是KEYEVENTF_KEYUP)

[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan,
    int dwFlags, int dwExtraInfo);

...

keybd_event(0xa2, 0x1d, 0, 0); // Press Left CTRL
keybd_event(0x7b, 0x58, 0, 0); // Press F12
keybd_event(0x7b, 0xd8, 2, 0); // Release F12
keybd_event(0xa2, 0x9d, 2, 0); // Release Left CTRL

另一种方法是在使用 SendKeys 之前激活您要发送到的应用程序。为此,您需要再次使用 P/Invoke 来查找应用程序的窗口并将其聚焦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从当前 .NET 表单/应用程序发送密钥 F12 的相关文章