Ho bisogno di simulare un keypress in un'applicazione di terze parti. Diciamo che ho un'applicazione C# che deve inviare un "8" all'applicazione Calcolatrice. Non posso usare SendKeys di .Net o keybd_event di win32 api perché entrambi richiedono che la finestra sia la più attiva, il che non è il caso nella mia situazione.Non riesco a capire come utilizzare le chiamate SendMessage o PostMessage
Quindi questo mi lascia con le chiamate sendMessage e postMessage. Ho provato nelle ultime tre ore a cercare di ottenere dei risultati ma in questo momento sono completamente senza speranza.
Ho il seguente:
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSCOMMAND = 0x018;
const int SC_CLOSE = 0x053;
int WindowToFind = FindWindow(null,"Calculator");
int result = SendMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
Boolean result2 = PostMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
int result3 = SendMessage(WindowToFind, WM_KEYDOWN,((int)Keys.NumPad7), 0);
Boolean result4 = PostMessage(WindowToFind, WM_KEYDOWN, ((int)Keys.NumPad7), 0);
}
Come potete vedere, io faccio quattro tentativi di comunicare con la calcolatrice. Utilizzare sendMessage e PostMessage per chiudere la finestra e anche per inviare la chiave 7. Niente funziona. Il metodo FindWindow funziona perché ottengo il gestore dell'app (ho persino provato a lanciare il processo da solo e ad accedervi con process.MainWindowHandler, ma senza fortuna). Non ci sono errori o eccezioni, ma semplicemente non fa nulla in Calcolatrice.
Ho provato anche le stesse identiche cose con il blocco note e non è cambiato nulla.
Wow. Ha funzionato? Parla di una congettura fortunata. Non ho mai nemmeno usato quei due particolari metodi win32. –
Im in realtà su 32 bit, ma ha funzionato comunque :) –
Ehi, qualunque cosa funzioni :) –