2008-10-06 22 views
4

我在C#中編寫了一個非常專業的應用程序,該應用程序在整個桌面上作爲大部分透明窗口浮動。我希望能夠創建鼠標事件並將其傳遞給我後面的應用程序,並讓它們看起來像「正常」一樣運行,響應這些事件。如果窗口管理員能夠做出迴應,這也會更好。如何將鼠標事件傳遞給C#/ Vista中我的應用程序?

我不是Windows大師,我不確定如何最好地完成這個。

從這個頁面: http://bytes.com/forum/thread270002.html

它會出現mouse_event將是一件好事,但因爲我的應用程序是漂浮在一切,我猜我的生成的事件將永遠不會使其對其他應用程序的下方。

它似乎是SendMessage的替代方法,但這需要大量的手動操作,並且生成的鼠標事件不是「真實的」。

任何想法的最佳方法來解決這個問題?

+0

您正在尋找/創建/活動,還是隻允許現有的鼠標點擊通過? – 2008-10-06 08:32:00

+0

我期待創建活動。 – Garth 2008-10-06 08:33:24

+0

如果你正在尋找創建事件,那麼SendMessage就像它獲得的一樣好。 AFAIK,使用SendMessage發送的消息與普通消息無法區分,除非您專門查找它。 – 2008-10-06 08:37:43

回答

2

查看系統掛鉤和其他低級解決方案後,我發現一個更簡單的方法。

首先,將窗體的TransparencyKey和BackColor設置爲相同。這對我來說沒有任何視覺上的差異,因爲我的表單已經是視覺透明的,但是這將有助於讓鼠標事件通過。

其次,下面的代碼會讓鼠標事件「落入」你的窗體。

protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams createParams = base.CreateParams; 
     createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT 

     return createParams; 
    } 
} 

最後,設置TopMost爲true。

您的表單現在將浮動在所有視覺上,但會放棄所有其他應用的焦點。

2

聽起來像你想要做的事情,像過濾用戶輸入。

也許你只需要一個鍵盤/鼠標鉤。

你可能想看看windows API調用SetWindowsHookEx。

還應該有足夠的樣本如何做到這一點在C#可用,我發現的第一件事是this link(也許不是最好的文章,但應該給你的想法)。

0

如果您禁用該控件並返回,您可以將MouseDown事件傳遞給父項。

相關問題