Я хочу отправить нажатие клавиши в программу, даже если она работает в фоновом режиме. Но я могу сделать это только для 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
программы?
Извините, если я пропустил любую необходимую информацию. это большое приложение. Я разместил здесь только необходимые запчасти. Если кому-то нужна дополнительная информация, пожалуйста, спросите.