2012-10-09 15 views
6

Después de mucha investigación sobre Stackoverflow y google, parece que es difícil enviar una combinación de teclas a una ventana de fondo usando su identificador. Por ejemplo, quiero enviar CTRL + F. Parece que Sendmessage no funciona, y enviar entrada no es efectivo porque la ventana necesita el foco.Enviar combinación de teclas a la ventana de fondo

Así que mi último pensamiento es acerca de enganchar: ¿hay alguna forma de usar esa forma de enviar una combinación?

Respuesta

6

Ok Encontré una solución, pero no funciona para todas las aplicaciones. De lo contrario, funciona con puTTY, el programa que quería controlar con la combinación de teclas. Y funciona incluso si la aplicación no está enfocada. ¡Así que he terminado ahora!

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

He escrito un par de programas que envían pulsaciones de teclas para ventanas de fondo, en general, he implementado PostMessage/SendMessage. ¡Documenté todos mis hallazgos here!

Pero básicamente utilizará una llamada c de bajo nivel para poner mensajes en la cola de mensajes de Windows para permitir que la aplicación tome las teclas presionadas.

PostMessage

SendMessage

Por favor, hágamelo saber si usted tiene alguna pregunta, mi biblioteca está escrito en C# y yo estaría feliz de compartirlo. Este método también permite el uso del ratón en una ventana de fondo :)

Todo el código se registró en GitHub: https://github.com/EasyAsABC123/Keyboard

+0

favor compartir! :) – Kukks

+8

agregado a mi github: https://github.com/EasyAsABC123/Keyboard – abc123

+0

Te amo hace mucho tiempo abc123 – Kukks

Cuestiones relacionadas