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

时间:2009-01-12 18:20:43

标签: c# .net sendkeys

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

的SendKeys( “^ {F12}”);

但它似乎没有继续到Windows shell并激活正在侦听它的另一个程序。我的键盘确实有效。似乎sendkeys在某个地方被截获,而不是以实际模拟击键的方式发送。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

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

要真实而真实地模拟系统范围内的击键,您需要从keybd_event P / Invoke SendInputuser32.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来查找应用程序的窗口并将其聚焦。