Come inviare i tasti F12 dall'attuale modulo / applicazione .NET
Domanda
Sono abbastanza sicuro che il seguente codice di modulo attivato da pulsante dovrebbe generare un Control-F12 nella mia applicazione C #:
SendKeys (" ^ {F12} ");
Ma non sembra passare alla shell di Windows e attivare un altro programma che lo sta ascoltando. La mia tastiera funziona. Sembra che le sendkeys vengano intercettate da qualche parte e non vengano inviate in un modo che simula effettivamente la pressione del tasto. Qualche aiuto?
Soluzione
SendKeys non è in grado di inviare chiavi al di fuori dell'applicazione attiva.
Per simulare davvero e veramente una sequenza di tasti a livello di sistema, è necessario P / Richiamare keybd_event
o SendInput
su user32.dll
. (Secondo MSDN SendInput
è il modo "corretto" ma keybd_event
funziona ed è più semplice da P / Invoke.)
Esempio ( penso questi codici chiave sono corretti ... il primo in ogni coppia è il codice VK_
, e il secondo è il codice di scansione della tastiera di make or break ... il " 2 " è KEYEVENTF_KEYUP
)
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan,
int dwFlags, int dwExtraInfo);
...
keybd_event(0xa2, 0x1d, 0, 0); // Press Left CTRL
keybd_event(0x7b, 0x58, 0, 0); // Press F12
keybd_event(0x7b, 0xd8, 2, 0); // Release F12
keybd_event(0xa2, 0x9d, 2, 0); // Release Left CTRL
L'alternativa è attivare l'applicazione a cui stai inviando prima di utilizzare SendKeys. Per fare ciò, dovresti usare nuovamente P / Invoke per trovare la finestra dell'applicazione e focalizzarla.