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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top