經過對Stackoverflow和谷歌的大量研究後,似乎很難將擊鍵的組合發送到使用它的句柄的背景窗口。例如,我想發送CTRL + F.似乎Sendmessage不起作用,並且sendinput無效,因爲窗口需要焦點。發送擊鍵組合到背景窗口
所以我最後的想法是關於掛鉤:有無論如何用這種方式發送組合?
經過對Stackoverflow和谷歌的大量研究後,似乎很難將擊鍵的組合發送到使用它的句柄的背景窗口。例如,我想發送CTRL + F.似乎Sendmessage不起作用,並且sendinput無效,因爲窗口需要焦點。發送擊鍵組合到背景窗口
所以我最後的想法是關於掛鉤:有無論如何用這種方式發送組合?
好的我找到了解決方法,但它不適用於所有應用程序。否則,它可以與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);
}
}
}
}
我已經寫了幾個該擊鍵發送到後臺Windows程序中,我通常執行PostMessage的/ SendMessage函數。我記錄了我的所有發現here!
但是,您基本上會使用低級別的c調用來將消息放入Windows消息隊列中,以允許應用程序獲取按鍵。
請讓我知道如果你有任何問題,我庫是用C#編寫,我很樂意分享。這種方法還允許使用鼠標在背景窗口:)
所有代碼被簽入到GitHub上:https://github.com/EasyAsABC123/Keyboard
請分享! :) – Kukks
添加到我的github:https://github.com/EasyAsABC123/Keyboard – abc123
愛你很長時間abc123 – Kukks