我嘗試將WM_LBUTTONDOWN和WM_LBUTTONUP消息發送到窗口(模擬鼠標點擊而不移動光標)。爲什麼SendMessage()函數不起作用?
我的計劃正在許多窗戶非常好,但也有少數不工作 :( 像註冊表編輯器,雅虎通,一些Firefox的網站,等等......
如何我可以與來自上述工作??
注1:我用的Win7
注2:我的代碼只是調用API和功能APLY他們在特定的窗口句柄它工作正常,但不是在所有窗口:(
我嘗試將WM_LBUTTONDOWN和WM_LBUTTONUP消息發送到窗口(模擬鼠標點擊而不移動光標)。爲什麼SendMessage()函數不起作用?
我的計劃正在許多窗戶非常好,但也有少數不工作 :( 像註冊表編輯器,雅虎通,一些Firefox的網站,等等......
如何我可以與來自上述工作??
注1:我用的Win7
注2:我的代碼只是調用API和功能APLY他們在特定的窗口句柄它工作正常,但不是在所有窗口:(
這是UAC的另一個方面,稱爲UIPI或用戶界面隱私隔離,可能會導致此問題。旨在防止劫持高級程序的性能不升級的程序。這當然可以解釋Regedit.exe的問題,如果一個程序可以指示它將東西戳到註冊表中,那麼UAC顯然是無效的。你必須運行你的程序來繞過這個限制。
另一個是SendMessage()不能正確模擬鼠標輸入。您發送的消息通常是發送到消息隊列。您需要使用PostMessage()。你也應該模擬WM_MOUSEMOVE。
模擬鼠標輸入的正確方法是通過SendInput()。那一個正好模擬鼠標驅動程序的行爲,程序沒有辦法區分。但有了額外的要求,您必須確保您嘗試自動化的任何程序在前臺運行。這非常困難,SetForegroundWindow()不夠可靠。所以只要考慮SendInput(),如果你實際上只想發送鼠標消息到前臺窗口,不管它是什麼。
感謝您通知我Hans, 如果它是前景窗口,它非常簡單:)但是,我想模擬點擊而不移動光標導致窗口被最小化。所以如果我使用POSTMESSAGE INSTEAD,它會更好? –
點擊最小化窗口?這是一件很奇怪的事情。本身就有很多失敗的原因。 –
對我來說是UIPI,我花了好幾天時間仔細閱讀Spy ++並嘗試各種Post和Send消息變體以使其發揮作用。感謝張貼,感謝你我終於完成了。 – Fehr
您可以撥打SwitchToThisWindow
代替SetForegroundWindow
,這是好多了,它的作品大部分時間,然後要麼調用SendInput
或mouse_event
,這是更舒適,因爲你不處理結構在所有。
註冊表編輯器將以管理員身份運行,因此您的程序將無權向其發送Windows消息,除非它也以管理員身份運行。 – Ben