簡體   English   中英

窗體應用程序未收到鼠標或鍵盤事件

[英]Forms application not receiving mouse or keyboard events

我在客戶端信息亭計算機(Windows XP)上運行了一個C#.NET 2.0應用程序,該應用程序偶爾會彈出一個供用戶輸入的窗口。 其他信息亭軟件似乎在某種程度上干擾了它,因為盡管它是運行中的窗口,但在運行時,我們的窗口將不會收到Mouse或Keyboard事件。 當其他軟件未運行時,所有工作均按預期進行。 是否有人對這里發生的事情有任何見解?

謝謝

如有疑問,請使用Visual Studio隨附的Spy ++查看您的窗口從系統收到的消息。

如果其他應用程序阻止了所有輸入,則說明它不符合Win32 API。 這就是為什么在Vista和較新的Win OS中引入了低級掛鈎超時的原因。 這意味着,如果某個進程在調用CallNextHookEx()之前停留在鈎子上的時間太長,並且不再收到任何低級鈎子消息,則該進程將被踢出低級鈎子鏈。

在Windows XP上,沒有這種限制。 一個過程可能要花費他們想處理一條掛接消息的時間。 另一個程序要么是越野車,要么是邪惡的。 如果必須輸入您的應用程序,則只需以編程方式關閉另一個應用程序或與它的作者聯系並說明情況。

經過一番挖掘后,其他Windows窗體程序可能正在使用類似於此處http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx的低級鍵盤掛鈎。 。 在瀏覽了該文章中的鏈接之后,我遇到了該代碼段的摘要。

對於一個具體的示例,請考慮圖4中的(錯誤的)代碼。使用低級鍵盤窗口掛鈎,該代碼將攔截發送到任何窗口的所有WM_KEYDOWN消息並打印出相應的鍵。

來源: http//msdn.microsoft.com/en-us/magazine/cc163606.aspx

在這里看看

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

使用全局鍵盤掛鈎應該很好,並且還包括一些資源。 另外,一些用戶似乎通過使用ManagedSpyLib解決了類似的問題:

https://stackoverflow.com/a/8829286/1284902

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM