2012-10-09 11 views
6

Po wielu badaniach nad Stackoverflow i google, wydaje się, że trudno jest przesłać kombinację klawiszy do okna tła, używając jego uchwytu. Na przykład chcę wysłać CTRL + F. Wygląda na to, że Sendmessage nie działa, a sendinput nie działa, ponieważ okno potrzebuje fokusu.Wyślij kombinację klawiszy do okna tła

Więc moja ostatnia myśl polega na zahaczaniu: czy mimo to używa się tej metody, aby wysłać kombinację?

Odpowiedz

6

Ok Znalazłem obejście problemu, ale nie działa ono we wszystkich aplikacjach. W przeciwnym razie działa z puTTY, programem, który chciałem kontrolować kombinacją klawiszy. Działa nawet wtedy, gdy aplikacja nie jest skupiona. Więc skończyłem już!

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

Napisałem kilka programów, które wysyłają naciśnięcia klawiszy do okien w tle, generalnie zaimplementowałem PostMessage/SendMessage. Udokumentowałem wszystkie moje odkrycia here!

Ale zasadniczo będziesz używać wywołania niskiego poziomu c, aby umieścić komunikaty w kolejce komunikatów systemu Windows, aby umożliwić aplikacji pobieranie naciśnięć klawiszy.

PostMessage

SendMessage

Proszę dać mi znać, jeśli masz jakiekolwiek pytania, moja biblioteka jest napisany w języku C# i chciałbym być szczęśliwy, aby go udostępnić. Metoda ta pozwala również używać myszki w oknie w tle :)

Cały kod został sprawdzony na GitHub: https://github.com/EasyAsABC123/Keyboard

+0

Proszę podzielić! :) – Kukks

+8

dodano do mojego github: https://github.com/EasyAsABC123/Keyboard – abc123

+0

Kocham cię długo abc123 – Kukks