2012-04-08 76 views
-2

那麼標題似乎很清楚我想做什麼。更準確地說:我想創建一個程序(C++或java是首選的),以兩種方式操作鼠標,如:更改其位置並執行點擊操作。 我正在考慮使用allegro(它有鼠標例程來操縱上面引用的東西)或sdl(我不知道是否有這種例程)。我試着與allegro nsuccessfully成功。我的問題在於我幾乎不能「點擊」。我也無法將我的程序更改的東西重定向到其他窗口。在windows中攔截鼠標事件

任何提示?

+1

使用SendInput()winapi函數。 – 2012-04-08 06:40:13

+0

但是如何?該計劃必須在窗口外進行的情況如何? – 2012-04-08 15:49:20

+0

你沒有指定你需要這個來處理最小化的應用程序。你正在瞄準一款遊戲嗎?如果是這樣,它可能有保護這種事情。 – 2012-04-08 17:21:21

回答

1

有一對夫婦的方式來嘗試在Windows自動執行的其他應用程序...

最簡單地說,可以使用PostMessage後鍵盤和鼠標消息到另一個應用程序的窗口。這具有如下優點:即使其他應用程序被最小化,它也可以工作。不幸的是,這種方法會跳過大部分輸入處理邏輯,因此無論發送多少個WM_KEYDOWN, vk=VK_CONTROL消息,使用GetAsyncKeyState直接訪問密鑰狀態的應用程序都不會看到(例如)控制密鑰被「關閉」。

Hans Passant評論說,SendImput將輸入事件放置在較低級別的輸入事件隊列中,因此可以完全模擬修改鍵。但是,這些輸入事件不會發布到窗口,因此要成功發送輸入事件,必須遵循正常的窗口激活規則和焦點。也就是說,這是大多數測試自動化軟件所使用的方法(這也是爲什麼大多數測試自動化軟件要求被測試的應用程序是主動應用程序)。

最後提到的自動化方法 - 不幸的是最不可能的工作 - 是Microsoft UI Automation框架。該框架旨在允許應用程序被禁用和/或特殊需求用戶使用。可悲的是 - 很少有軟件供應商在他們的產品中實現這個API。