Отправлять нажатия клавиш программе, даже если она находится в фоновом режиме с использованием C #

Я хочу отправить нажатие клавиши программе, даже если она работает в фоновом режиме. Но я могу сделать это только для NOTEPAD, как этот,

[DllImport("user32.dll")]
protected static extern byte VkKeyScan(char ch);

[DllImport("user32.dll", SetLastError = true)]
protected static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.Dll", EntryPoint = "PostMessageA")]
protected static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);

char Key = // key value to send

IntPtr hWnd = FindWindowEx(_handle, IntPtr.Zero, "edit", null);   // _handle is the windows handle of the program (here its notepad)
PostMessage(hWnd, WM_KEYDOWN, VkKeyScan(Key), 0);

Но для всех других приложений я не могу отправлять нажатия клавиш, если они работают в фоновом режиме. Так как я не знаю lpszClass этой программы (я думаю, что это имя userControl области ввода в этой программе. Для NotePad это "edit" . Я нашел это серфинг в Интернете).

Для всех других приложений я делаю следующее: вывести приложение на передний план, затем отправить ключ, а затем снова вывести мою программу на передний план. Мне нужно, чтобы моя программа всегда запускалась на переднем плане.

[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

SetForegroundWindow(_handle);       // _handle is the windows handle of the program

System.Threading.Thread.Sleep(50);       // Waiting few milliseconds till application coming to foreground.                    
wsh.SendKeys(Key.ToString(), ref wait);  // wsh is WshShellClass wsh= new WshShellClass();
SetForegroundWindow(_mainHandle);    // _mainHandle is the windows handle of my application

Но этот способ не работает. некоторые клавиши пропускаются, а программа передний план-> фон-> передний-> фон ...... как его танцы ... или есть ли способ / источник найти lpszClass программы?

Извините, если я пропустил любую необходимую информацию. это большое приложение. Я разместил здесь только необходимые детали. Если кому-то нужна дополнительная информация, спрашивайте.

5
задан Sency 13 January 2011 в 18:18
поделиться