我有一個進程A,啓動進程B.我在A中加載鼠標光標,並且希望A在鼠標位於B窗口。可能嗎?在Windows上從另一個進程的窗口中更改鼠標光標
當鼠標懸停在B上時,我試圖從A呼叫SetCursor,但即使我在B中處理消息WM_SETCURSOR,光標也不會改變。我錯過了什麼嗎?
我有一個進程A,啓動進程B.我在A中加載鼠標光標,並且希望A在鼠標位於B窗口。可能嗎?在Windows上從另一個進程的窗口中更改鼠標光標
當鼠標懸停在B上時,我試圖從A呼叫SetCursor,但即使我在B中處理消息WM_SETCURSOR,光標也不會改變。我錯過了什麼嗎?
當窗口在另一個窗口上方時,窗口可以控制鼠標的唯一方法是捕獲鼠標(請參閱SetCapture)或設置系統鼠標,但我非常懷疑您希望執行後者。
不幸的是,捕獲鼠標意味着您將所有鼠標事件發送到您的窗口而不是他們的窗口,因此它們的GUI不可用。
唯一的其他解決方案是API掛鉤和代碼注入B,您可以在其中管理任何消息,如WM_MOUSEMOVE並從應用程序本身中調用SetCursor,可能使用某種進程間通信方法來獲取應用程序A設置的光標。
您可以使用SetClassLong
和GCL_HCURSOR
更改子進程的默認光標。這不會影響孩子使用SetCursor
顯式更改其自己的光標時顯示的內容,只是在未指定任何其他內容時顯示的默認設置。警告:程序可能永遠不會顯示其默認光標,在這種情況下,這不會產生任何影響。
我已經嘗試過了,但是因爲我的光標在A中加載,所以看起來B中的句柄無效,所以它不起作用。 – Jazz
使用SetCapture對我來說不會是個問題,因爲A已經處理事件並在窗口上繪圖;但問題在於,SetCapture似乎只能在頂層窗口中使用。 – Jazz