Desidero inviare un tratto chiave a un programma anche se è in esecuzione in background. Ma posso farlo solo per il blocco note come questo,Invia sequenze di tasti a un programma anche se è in background utilizzando C#
[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);
Ma per tutte le altre applicazioni non posso inviare sequenze di tasti se in background. Dal momento che non conosco il lpszClass
di quel programma (penso che questo sia il nome userControl dell'area di digitazione in quel programma .Per NotePad è "edit"
. Ho trovato questo navigare in internet).
Per tutte le altre applicazioni ciò che sto facendo è mettere l'applicazione in primo piano, quindi inviare la chiave, quindi ottenere di nuovo il programma in primo piano. Ho bisogno che il mio programma sia sempre in primo piano.
[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
Ma in questo modo non sta funzionando. alcuni tasti vengono persi e il programma in primo piano-> sfondo> precedente-> sfondo ...... come il suo ballo ...
Come inviare le chiavi ad altre applicazioni se è in esecuzione in background. o c'è qualche modo/fonte per trovare il lpszClass
di un programma?
Scusate se ho perso tutte le informazioni richieste. questa è una grande applicazione. Ho pubblicato solo le parti richieste qui. Se qualcuno ha bisogno di ulteriori informazioni, si prega di chiedere.
Centinaia di domande su questo a SO già, non sono sicuro di come vi siete persi. Qualunque cosa tu faccia per focalizzare l'attenzione, non farlo. –