2013-03-08 14 views
16

Chcę wysłać konkretny klawisz (np k) do innego programu o nazwie notes, a poniżej jest kod, który kiedyś:C# przy użyciu funkcji sendKey wysłać klucz do innej aplikacji

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

ale kod nie działa, co jest nie tak z kodem?

Edytowane: Czy to możliwe, że wysyłam "K" do notatnika bez notatnika, aby było to aktywne okno? (Np aktywnego okna = „Google Chrome”, notatnik jest w tle, co oznacza, wysyłając klucz do aplikacji w tle)

+0

czy pojawia się błąd? – Zaki

+0

Nie, nie, zamiast tego, po prostu wyślij "K" do górnego okna – User2012384

+1

zobacz, czy to pomaga: http://stackoverflow.com/questions/825651/how-can-i-send-the-f4- klucz-do-procesu-in-c – Zaki

Odpowiedz

34

Jeżeli schowek jest już uruchomiony, należy napisać:

// 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 zwraca macierz procesów, więc powinieneś dostać pierwszą (lub znaleźć tę, którą chcesz).

Jeśli chcesz rozpocząć notepad i wysłać klucz, należy napisać:

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

Jedyna sytuacja, w której kod może nie działać kiedy notepad jest uruchamiany jako administrator i aplikacja nie jest.

+0

Ale nie chcę uruchamiać programu programowo, co chcę zrobić, to wysłać klucz do działający program, czy jest jakikolwiek sposób to zrobić? – User2012384

+0

notatnik został otwarty ręcznie – User2012384

+0

@HugoWong Zobacz edytowaną odpowiedź. –

Powiązane problemy