2013-03-08 19 views
16

Voglio inviare una chiave specifica (ad esempio, k) ad un altro programma chiamato blocco note, e sotto è il codice che ho usato:C# utilizzando la funzione Sendkey per inviare una chiave a un'altra applicazione

void sendkey() 
{ 
    [DllImport ("User32.dll")] 
    static extern int SetForegroundWindow(IntPtr point); 

    Process p = Process.GetProcessesByName("notepad")[0]; 
    IntPtr pointer = p.Handle; 
    SetForegroundWindow(pointer); 
    SendKeys.Send("k"); 
} 

Ma il codice non funziona, cosa c'è di sbagliato nel codice?

Modificato: È possibile che io invii la "K" al blocco note senza che il blocco note sia la finestra attiva? (Ad esempio finestra attiva = "Google Chrome", blocco note è nel backgound, il che significa che l'invio di una chiave per un'applicazione in background)

+0

hai qualche errore? – Zaki

+0

No, invece, non manda semplicemente la "K" alla finestra in alto – User2012384

+1

vedere se questo aiuta: http://stackoverflow.com/questions/825651/how-can-i-send-the-f4- key-to-a-process-in-c – Zaki

risposta

34

Se notepad è già stato avviato, si dovrebbe scrivere:

// import the function in your class 
[DllImport ("User32.dll")] 
static extern int SetForegroundWindow(IntPtr point); 

//... 

Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); 
if(p != null) 
{ 
    IntPtr h = p.MainWindowHandle; 
    SetForegroundWindow(h); 
    SendKeys.SendWait("k"); 
} 

GetProcessesByName restituisce un array di processi, quindi dovresti prendere il primo (o trovare quello che vuoi).

Se si desidera avviare notepad e inviare la chiave, si dovrebbe scrivere:

Process p = Process.Start("notepad.exe"); 
p.WaitForInputIdle(); 
IntPtr h = p.MainWindowHandle; 
SetForegroundWindow(h); 
SendKeys.SendWait("k"); 

L'unica situazione in cui il codice non può funzionare è quando notepad viene avviato come amministratore e l'applicazione non è.

+0

Ma io non voglio avviare il programma in modo programmabile, quello che voglio fare è inviare la chiave ad un programma in esecuzione, c'è un modo per farlo? – User2012384

+0

Blocco note aperto manualmente – User2012384

+0

@HugoWong Vedi la risposta modificata. –