2012-10-09 8 views
6

Sau nhiều nghiên cứu về Stackoverflow và google, có vẻ như rất khó để gửi kết hợp phím tắt tới cửa sổ nền bằng tay cầm của nó. Ví dụ, tôi muốn gửi CTRL + F. Có vẻ như Sendmessage không hoạt động, và sendinput không hiệu quả vì cửa sổ cần tiêu điểm.Gửi sự kết hợp của tổ hợp phím tới cửa sổ nền

Vì vậy, suy nghĩ cuối cùng của tôi là về hooking: có cách nào để sử dụng cách đó để gửi kết hợp không?

Trả lời

6

Ok Tôi đã tìm được cách giải quyết, nhưng nó không hoạt động đối với tất cả các ứng dụng. Nếu không, nó hoạt động với puTTY, chương trình tôi muốn kiểm soát với tổ hợp phím tắt. Và nó hoạt động ngay cả khi ứng dụng không tập trung. Vì vậy, tôi đã hoàn tất ngay bây giờ!

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

Tôi đã viết một vài chương trình gửi tổ hợp phím đến cửa sổ nền, tôi thường triển khai PostMessage/SendMessage. Tôi đã ghi lại tất cả các phát hiện của mình here!

Nhưng về cơ bản, bạn sẽ sử dụng cuộc gọi c ở mức độ thấp để đặt thư vào hàng đợi thông báo của cửa sổ để cho phép ứng dụng nhận các lần nhấn phím.

PostMessage

SendMessage

Xin vui lòng cho tôi biết nếu bạn có bất kỳ câu hỏi, thư viện của tôi được viết bằng C# và tôi muốn được hạnh phúc để chia sẻ nó. Phương pháp này cũng cho phép sử dụng chuột trong một cửa sổ background :)

Tất cả mã đã được kiểm tra vào GitHub: https://github.com/EasyAsABC123/Keyboard

+0

Xin hãy chia sẻ! :) – Kukks

+8

thêm vào github của tôi: https://github.com/EasyAsABC123/Keyboard – abc123

+0

Yêu bạn thời gian dài abc123 – Kukks