2011-07-06 150 views

回答

2

當窗口在另一個窗口上方時,窗口可以控制鼠標的唯一方法是捕獲鼠標(請參閱SetCapture)或設置系統鼠標,但我非常懷疑您希望執行後者。

不幸的是,捕獲鼠標意味着您將所有鼠標事件發送到您的窗口而不是他們的窗口,因此它們的GUI不可用。

唯一的其他解決方案是API掛鉤和代碼注入B,您可以在其中管理任何消息,如WM_MOUSEMOVE並從應用程序本身中調用SetCursor,可能使用某種進程間通信方法來獲取應用程序A設置的光標。

+0

使用SetCapture對我來說不會是個問題,因爲A已經處理事件並在窗口上繪圖;但問題在於,SetCapture似乎只能在頂層窗口中使用。 – Jazz

1

應用程序控制它們自己的遊標。調用SetCursor()不能從A不可能工作。請注意,SetCursor()沒有指定要對其進行更改的應用程序的參數。這是因爲更改是在調用應用程序中進行的。

您需要將代碼注入B以實現所需的更改。

+0

我可以將該功能編碼爲B而不是注入代碼。但問題是我必須將數據注入到B中,因爲我的光標在A中而不是B中加載。 – Jazz

+0

您只需要找到一種方法在B中加載它。這應該是您的問題。 –

+0

我想避免這一點,但似乎我沒有別的選擇。 – Jazz

1

您可以使用SetClassLongGCL_HCURSOR更改子進程的默認光標。這不會影響孩子使用SetCursor顯式更改其自己的光標時顯示的內容,只是在未指定任何其他內容時顯示的默認設置。警告:程序可能永遠不會顯示其默認光標,在這種情況下,這不會產生任何影響。

+0

我已經嘗試過了,但是因爲我的光標在A中加載,所以看起來B中的句柄無效,所以它不起作用。 – Jazz