2012-10-09 1 views
6

Dopo molte ricerche su Stackoverflow e Google, sembra che sia difficile inviare una combinazione di tasti a una finestra di sfondo utilizzando il suo handle. Ad esempio, desidero inviare CTRL + F. Sembra che Sendmessage non funzioni e sendinput non è efficace perché la finestra richiede il focus.Invia combinazione di tasti alla finestra di sfondo

Quindi il mio ultimo pensiero riguarda l'aggancio: c'è comunque un modo per inviare una combinazione?

risposta

6

Ok ho trovato una soluzione alternativa, ma non funziona per tutte le applicazioni. Altrimenti, funziona con puTTY, il programma che volevo controllare con la combinazione di tasti. E funziona anche se l'applicazione non è focalizzata. Quindi ho finito ora!

class SendMessage 
{ 
[DllImport("user32.dll")] 
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 

public static void sendKeystroke() 
{ 
    const uint WM_KEYDOWN = 0x100; 
    const uint WM_KEYUP = 0x0101; 

    IntPtr hWnd; 
    string processName = "putty"; 
    Process[] processList = Process.GetProcesses(); 

    foreach (Process P in processList) 
    { 
     if (P.ProcessName.Equals(processName)) 
     { 
      IntPtr edit = P.MainWindowHandle; 
      PostMessage(edit, WM_KEYDOWN, (IntPtr)(Keys.Control), IntPtr.Zero); 
      PostMessage(edit, WM_KEYDOWN, (IntPtr)(Keys.A), IntPtr.Zero); 
      PostMessage(edit, WM_KEYUP, (IntPtr)(Keys.Control), IntPtr.Zero); 
     } 
    }       
} 

} 
5

Ho scritto un paio di programmi che inviano sequenze di tasti a sfondo finestre, io generalmente implementato PostMessage/SendMessage. Ho documentato tutti i miei risultati here!

Ma in pratica si utilizzerà una chiamata di livello basso per inserire messaggi nella coda dei messaggi di Windows per consentire all'applicazione di riprendere i tasti premuti.

PostMessage

SendMessage

Per favore fatemi sapere se avete domande, la mia biblioteca è scritto in C# e sarei felice di condividerlo. Questo metodo permette anche per l'uso del mouse in una finestra di sfondo :)

Tutto il codice è stato controllato in GitHub: https://github.com/EasyAsABC123/Keyboard

+0

Si prega di condividere! :) – Kukks

+8

aggiunto al mio github: https://github.com/EasyAsABC123/Keyboard – abc123

+0

Ti amo da tempo abc123 – Kukks