2012-12-21 61 views
0

我有一個第三方的應用程序(我稱之爲GreedyApp爲了簡潔),其持有的鼠標和鍵盤輸入的人質時,它的窗口獲得焦點,即它隱藏了標準的鼠標光標和與它自己的替換它光標,並將光標限制在其窗口中。輸入到其他窗口的唯一方法是從GreedyApp遠離ALT + TAB。停止應用程序盜取輸入

我需要允許用戶免費使用系統的所有組件(交付的系統將是純觸摸屏),因此一旦GreedyApp獲得焦點,系統的其餘部分就會變得不可用。

到目前爲止,我已經爲GreedyApp劫持了user32.dll,掛鉤了SetCursor,ShowCursorClipCursor,並將其禁用。結果是GreedyApp不再隱藏光標,並且光標在用戶移動它的任何地方都可以隨意漫遊,但是...

我留下的問題是,無論屏幕上的哪個位置光標被按下,或按下鍵盤上的哪些鍵(除ALT + TAB),輸入仍然是直接進入GreedyApp,和其他Windows沒有收到任何輸入。

我不知道GreedyApp是如何實現這一點,因此我還不知道哪個API調用掛鉤來阻止它。我雖然可能已經使用鉤子本身,但我已經掛鉤並禁用SetWindowsHookEx,但問題仍然存在。

所以我的問題是這樣的:

或者:

A)是否有一個(相對直接的)的方式來找出API調用的應用程序在運行時在做什麼?

B)什麼方法是GreedyApp可能被使用以從接收輸入停止其他窗口?

+1

的SetFocus()控制,很可能。 –

+1

也可能是SetCapture()。 –

+0

我也考慮過SetCapture(),但那不會捕獲用於其他進程的鼠標輸入。因此,也許GreedyApp使用[AttachThreadInput](http://msdn.microsoft.com/en-us/library/windows/desktop/ms681956.aspx)代替,以引導輸入處理到其自己的消息隊列。 – IInspectable

回答

0

該應用程序使用RegisterRawInputDevices獲取原始鼠標和鍵盤輸入,並使用標誌RIDEV_CAPTUREMOUSE停止其他應用程序獲得焦點。

我已經迷上了API調用和參數傳遞給Windows API來處理之前刪除標誌。現在,用戶對系統有:)