2012-10-09 43 views
6

經過對Stackoverflow和谷歌的大量研究後,似乎很難將擊鍵的組合發送到使用它的句柄的背景窗口。例如,我想發送CTRL + F.似乎Sendmessage不起作用,並且sendinput無效,因爲窗口需要焦點。發送擊鍵組合到背景窗口

所以我最後的想法是關於掛鉤:有無論如何用這種方式發送組合?

回答

6

好的我找到了解決方法,但它不適用於所有應用程序。否則,它可以與puTTY一起使用,我想用按鍵組合來控制該程序。即使應用程序不集中,它也可以工作。所以我現在完成了!

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

我已經寫了幾個該擊鍵發送到後臺Windows程序中,我通常執行PostMessage的/ SendMessage函數。我記錄了我的所有發現here

但是,您基本上會使用低級別的c調用來將消息放入Windows消息隊列中,以允許應用程序獲取按鍵。

PostMessage

SendMessage

請讓我知道如果你有任何問題,我庫是用C#編寫,我很樂意分享。這種方法還允許使用鼠標在背景窗口:)

所有代碼被簽入到GitHub上:https://github.com/EasyAsABC123/Keyboard

+0

請分享! :) – Kukks

+8

添加到我的github:https://github.com/EasyAsABC123/Keyboard – abc123

+0

愛你很長時間abc123 – Kukks