2012-08-24 78 views
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

這是我的意見:

  1. 立即啓動應用後,根本沒有的事件傳輸,無論在哪裏我移動鼠標。
  2. 單擊應用程序的窗口將以某種方式激活事件傳遞。現在我收到NSMouseMovedMask事件,無論我移動鼠標的位置(這是我想要實現的)。
  3. 單擊回Xcode不會改變任何內容。我不斷收到這些事件。
  4. 但是,將焦點移回到我的應用程序會導致一種奇怪的行爲。當我將鼠標移到Xcode上時,我只會在窗口的某些部分發生事件,而某些部分似乎吸收了事件。更具體地說,我沒有通過編輯器或日誌視圖接收事件。我只在將鼠標移動到灰色的分割視圖分隔符區域(並且標籤欄嵌入其中)時纔會收到它們。
+0

是的,它應該在你的應用程序之外工作,我不知道它爲什麼不是你。如果您想查看鼠標移動(不拖動),請嘗試使用NSMouseMovedMask。在我手中,它不會開始監控,直到我點擊某處,無論是在應用程序內還是在應用程序外。 – rdelmar

+0

你確定那段代碼正在運行(使用NSLog的或斷點)? – TheAmateurProgrammer

+0

@rdelmar對不起,我實際上是在使用NSMouseMovedMask。我修正了這一點。業餘程序員是的,我登錄了它。事件監視器被添加。但它隨機似乎停止工作。我認爲這是當我將鼠標移動到某些其他窗口時。像Xcode或消息。將鼠標移動到牆紙上即可註冊。很奇怪。 – DrummerB

回答

1

它應該可以工作,當窗口打開但不在前景時,我看到了奇怪的行爲。我注意到,如果應用程序位於後臺,但不在擴展塢中,則只有當鼠標在前景中的窗口之間轉換時纔會發生事件。儘量減少應用程序似乎解決了這個問題..我在可可開發/ ObjC非常新..我可能是錯的,但我注意到,當我最小化我的應用程序,我得到的所有事件。

相關問題