2011-08-29 74 views
6

我使用的VS 2010生成的簡單窗體包含2個按鈕,啓動和停止。 使用SetWindowsHookEx啓動WH_MOUSE_LL觸發器,並停止掛鉤。 掛鉤工作正常,我管理「替換」雙擊鼠標中鍵,我唯一的問題是單擊窗體的最小化/最大化/關閉按鈕,似乎有某種「事件競賽」鉤子和上述按鈕所調用的事件之間。它反映了這樣一個事實,即當你按下其中一個按鈕時,它會一直按住一段時間,然後它完成它的動作(例如最小化表單)。 當我右鍵單擊表單並選擇其中一個動作時,它立即響應同樣的事情時,我停止掛鉤並按上述按鈕之一。 有沒有人遇到過這種行爲?C#低級別鼠標掛鉤和窗體事件處理

+3

我的第一個直覺是,你可能使用了錯誤的工具來完成這項工作 - 當你需要使用Windows鉤子時,我無法想到很多情況。也許如果你能回到導致你實施這個解決方案的問題上,並且發佈了一個關於它的問題呢? –

+1

嗨,據我所知,我做了相當多的研究之前,接近這種方法,如果我想我的通用鼠標產生雙擊時,我點擊鼠標中鍵是「攔截」中間點擊和模擬兩個左鍵單擊相同x,y的鼠標,如果我希望它甚至當我的應用程序工作。不在焦點或最小化(或在系統托盤)掛鉤是唯一的方法。任何方式我更多的C/C++程序員我只是想使用C#,因爲創建GUI的簡單性。 – Alex

+1

@Alex - 您的研究將導致您得出錯誤結論。只需捕獲鼠標中鍵,並執行與雙擊鼠標事件相同的事件(實際上只是單擊事件)。除了不是所有的老鼠都有鼠標中鍵,所以要注意這一點。 –

回答

2

我以前也經歷過這種情況。我不確定究竟是什麼原因,但我總是通過監聽當鼠標進入並離開窗體,窗口等客戶區域時觸發的事件來解決問題。你可以使用這些事件來掛鉤和解開鼠標,然後你會得到正常的行爲。