SendKey.Send () Not working

I am using WPF and I have imported the System.Windows.Form link. Here is my code:

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

Windows Media Player does focus, but no keystroke is accepted. Why?

+7
source share
2 answers

You can use WinAPI instead of 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); } 
+8
source

In WPF applications, you should use SendKeys.SendWait () ( English documentation ).

Just double-check it and Send () works for the WinForms application, WPF throws an InvalidOperationException, albeit for the target .net 4.0.

Check out the link above for more information.

+4
source

All Articles