我很确定以下按钮激活的表单代码应该在我的 C# 应用程序中引发 Control-F12:
SendKeys("^{F12}");
但它似乎没有继续到 Windows shell 并激活另一个正在监听它的程序。我的键盘工作正常。似乎 sendkeys 在某处被截获,而不是以实际模拟击键的方式发送。有什么帮助吗?
SendKeys 无法在活动应用程序之外发送密钥。
要真正模拟系统范围内的击键,您需要 P/Invokekeybd_event
或SendInput
从user32.dll
. (根据 MSDNSendInput
是“正确”的方式,但keybd_event
有效且 P/Invoke 更简单。)
示例(我认为这些键码是对的……每对中的第一个是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 来查找应用程序的窗口并将其聚焦。