SendKey.Send()不工作

我正在使用WPF,我导入了System.Windows.Form引用。 这是我的代码:

Process[] process = Process.GetProcessesByName("wmplayer"); SetForegroundWindow(process[0].MainWindowHandle); Thread.Sleep(200); System.Windows.Forms.SendKeys.Send("^p"); 

Windows Media Player执行聚焦,但未收到任何击键。 为什么?

您可以使用WinAPI而不是SendKeys:

 [DllImport("user32.dll", SetLastError = true)] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); public static void PressKey(Keys key, bool up) { const int KEYEVENTF_EXTENDEDKEY = 0x1; const int KEYEVENTF_KEYUP = 0x2; if (up) { keybd_event((byte) key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr) 0); } else { keybd_event((byte) key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr) 0); } } void TestProc() { PressKey(Keys.ControlKey, false); PressKey(Keys.P, false); PressKey(Keys.P, true); PressKey(Keys.ControlKey, true); } 

在WPF应用程序中,您必须使用SendKeys.SendWait() ( 英文文档 )。

只需对其进行双重检查,而Send()适用于WinForms应用程序,但WPF会抛出InvalidOperationException,尽管两者都是.net 4.0。

有关更多信息,请查看以上链接