2013-03-08 2 views
16

ich einen bestimmten Schlüssel (zB k) auf ein anderes Programm namens Notizblock senden möchten, und unten ist der Code, den ich verwendet:C# Sendkey Funktion mit einem Schlüssel zu einer anderen Anwendung senden

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"); 
} 

Aber der Code funktioniert nicht, was ist mit dem Code falsch?

Bearbeitet: Ist es möglich, dass ich das "K" an den Notizblock ohne Notizblock sende, um das aktive Fenster zu sein? (ZB aktive Fenster = „Google Chrome“, Notizblock in der backgound ist, was bedeutet, einen Schlüssel zu einer Hintergrundanwendung sendet)

+0

erhalten Sie einen Fehler? Nein – Zaki

+0

ich nicht, sondern es senden Sie einfach die „K“ nach oben Fenster – User2012384

+1

sehen, ob das hilft: http://stackoverflow.com/questions/825651/how-can-i-send-the-f4- key-to-a-process-in-c – Zaki

Antwort

34

Wenn Notizblock bereits gestartet ist, sollten Sie schreiben:

// 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 kehrt ein Array von Prozessen, so sollten Sie die erste (oder finden Sie die gewünschte).

Wenn Sie notepad starten möchten, und den Schlüssel zu senden, sollten Sie schreiben:

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

Die einzige Situation, in der der Code nicht funktionieren kann, wenn notepad als Administrator gestartet und Ihre Anwendung ist es nicht.

+0

Aber ich möchte nicht das Programm programmierbar zu starten, was ich tun möchte, ist der Schlüssel zu einem senden laufendes Programm, gibt es eine Möglichkeit, dies zu tun? – User2012384

+0

Notizblock wurde manuell geöffnet – User2012384

+0

@HugoWong Siehe bearbeitete Antwort. –

Verwandte Themen