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