2017-02-15 262 views
1

有人能指導我找出一個Windows API函數來使用,以攔截在特定窗口上的某個按鈕上點擊鼠標。我已經使用spy ++瞭解到,當我將查找工具移動到某個按鈕或窗口中的任何東西時,我可以讀取有關處理程序和其他信息的信息。那麼有沒有辦法在執行某個動作之前攔截鼠標點擊並注入我們的代碼。非常感謝您分享任何關於此的想法。攔截窗口鼠標點擊

回答

2

我能想到的幾個不同的方式來處理這個:

  1. 您可以使用SetWindowsHookEx()安裝在目標窗口中的一個WH_CALLWNDPROC消息鉤子線程,然後鉤子回調可以在目標窗口的父級上處理窗口消息,如WM_LBUTTON(DOWN|UP),或者在目標窗口的父級上處理BN_CLICKED。需要注意的是回調需要在DLL中實現,因此可以將鉤子注入到目標進程中。您可以使用GetWindowThreadProcessId()獲取目標窗口的線程ID。

    其中的一種變化是讓SetWindowsHookEx()安裝WH_GETMESSAGE鉤子,然後您可以使用PostMessage()將自定義窗口消息發送到目標窗口。鉤子回調然後可以使用SetWindowLongPtr()SetWindowSubclass()來直接對目標窗口和/或其父級進行子類化以用於進一步的消息處理。

  2. 您可以使用SetWinEventHook()來監視EVENT_OBJECT_INVOKED事件,例如按鈕點擊。如果使用WINEVENT_OUTOFCONTEXT標誌,則不需要DLL,但需要注意的是安裝線程需要一個活動的消息循環,以便跨越流程邊界處理事件。

+0

這是最好的答案,但它需要代碼示例 – FindOutIslamNow

1

您將需要調用SetWindowsHookEx API來設置窗口掛鉤。下面是與源代碼的文章,演示其用法:Hooks and DLLs

+0

@RemyLebeau我已經發布了一種方法。如果它與我的不同,請單獨發佈您自己的答案。 –