4
我希望在鼠標移動並獲取屏幕位置時收到通知。我試過這個:在Cocoa屏幕上觀察全局鼠標位置?
[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent *event) {
CGPoint location = [NSEvent mouseLocation];
NSLog(@"Position: %@", NSStringFromPoint(location));
}];
但是,只要鼠標在我的應用程序的窗口中,這似乎只工作。一旦離開,我不會收到通知。直到我再次進入窗口。這個活動不應該是全球性的嗎?
UPDATE:
我提取有問題的代碼,並提出了單獨的樣品項目(Dropbox-Link)。可以肯定的是,沒有任何其他干擾。這是一個乾淨的項目,只有applicationDidFinishLaunching:
以上的代碼。我得到了同樣的結果,這真的很奇怪。我將視頻上傳到了YouTube:http://www.youtube.com/watch?v=I3AKgmURaMk。
這是我的意見:
- 立即啓動應用後,根本沒有的事件傳輸,無論在哪裏我移動鼠標。
- 單擊應用程序的窗口將以某種方式激活事件傳遞。現在我收到NSMouseMovedMask事件,無論我移動鼠標的位置(這是我想要實現的)。
- 單擊回Xcode不會改變任何內容。我不斷收到這些事件。
- 但是,將焦點移回到我的應用程序會導致一種奇怪的行爲。當我將鼠標移到Xcode上時,我只會在窗口的某些部分發生事件,而某些部分似乎吸收了事件。更具體地說,我沒有通過編輯器或日誌視圖接收事件。我只在將鼠標移動到灰色的分割視圖分隔符區域(並且標籤欄嵌入其中)時纔會收到它們。
是的,它應該在你的應用程序之外工作,我不知道它爲什麼不是你。如果您想查看鼠標移動(不拖動),請嘗試使用NSMouseMovedMask。在我手中,它不會開始監控,直到我點擊某處,無論是在應用程序內還是在應用程序外。 – rdelmar
你確定那段代碼正在運行(使用NSLog的或斷點)? – TheAmateurProgrammer
@rdelmar對不起,我實際上是在使用NSMouseMovedMask。我修正了這一點。業餘程序員是的,我登錄了它。事件監視器被添加。但它隨機似乎停止工作。我認爲這是當我將鼠標移動到某些其他窗口時。像Xcode或消息。將鼠標移動到牆紙上即可註冊。很奇怪。 – DrummerB