2011-08-21 61 views
17

在Cocoa應用程序中,有沒有辦法判斷當前是否另一個應用程序處於全屏模式?Mac OS X Lion:檢測其他應用程序是否以全屏模式運行?

我的應用程序被配置爲顯示所有空間上,並監聽mouseEntered事件本身爲了把前面。

問題是,當另一個應用是在全屏模式下,並且用戶恰好橫跨在我的應用程序的窗口位於黑色區域移動鼠標,它被帶到前面(使用多個顯示器發生)。

我只看到有[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];上述行爲啓用。

這裏是我的應用程序的其他相關代碼。

- (void) mouseEntered:(NSEvent *)theEvent 
{ 
    // Don't do this when another app is in full screen mode: 
    [[self window] orderFront:self]; 
} 
+0

檢查這兩個環節了 - 他們可能會給你一個提示:http://stackoverflow.com/questions/633086/detecting-fullscreen-on-mac和http://計算器.com/questions/6815917/how-to-know-if-a-nswindow-is-fullscreen-in-mac-os-x-lion – leanne

回答

1

嗯,你排除使用applescript/scriptingbridge?你可以從applescript中獲取窗口大小,並將它們與屏幕大小進行比較。 (或者你不知道給定應用程序在哪個屏幕上?)
某些可訪問的應用程序在其窗口中將具有「AXFullScreen」屬性。例如,這適用於一些應用:

tell application "System Events" 
    tell process "Pages" 
     repeat with myWin in windows 
      get value of attribute "AXFullScreen" of myWin 
     end repeat 
    end tell 
end tell 

真正的行動似乎是在碳下來... MacWindows.h和CarbonEvents.h在他們提到「全屏」。

你需要研究這個。

+0

您可以通過AppleScript執行任何操作,您可以在本機代碼中更快地執行操作。此博客文章提供了有關訪問代碼中AX屬性的主題:http://cocoatutorial.grapewave.com/tag/axuielementcopyattributevalue/ – ipmcc

1

使用通知。例如:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(willEnterFull:) 
              name:NSWindowWillEnterFullScreenNotification 
              object:nil]; 

實際上,您可能會想要使用NSDistributedNotificationCenter,因爲它會跨越流程。

您要添加的對象作爲一個觀察者,這樣,當別的職位,它會進入全屏通知,您的對象將收到通知。

選擇器是您希望由通知進程調用的消息/方法。

name參數是通知的實際名稱。這些都是標準的,除非你要爲你要使用的東西創建一個自定義通知。

對象參數用於指定您希望收到通知哪些對象。既然你想知道什麼時候任何應用程序正在全屏顯示,你會想離開這個零。

記住它釋放之前刪除你的對象作爲觀察員!

+0

這隻適用於在應用程序啓動後變爲全屏的應用程序。如果在應用程序啓動時運行全屏應用程序,則它們不會將新通知發送到您的應用程序。 – Kyle

+0

是的,之前的通知不會重新發送到剛剛啓動的應用程序。因此,如果Mark需要知道其他應用程序是否已在其應用程序啓動時全屏顯示,那麼這不會起作用。但是一旦他的應用程序啓動,它就會檢測到從此時開始進入全屏模式的任何應用程序。 – leanne

+0

山獅的通知行爲是否改變?因爲你的代碼不會給我任何通知(分佈式中心)。當我將名稱參數設置爲零(接收所有通知)時,進入全屏模式時,我只會得到「com.apple.HIToolbox.hideMenuBarShown」。 –

1

「NSWindowWillEnterFullScreenNotification」登記的上述方法

不起作用,它們可以用來通知自己的應用程序,使用他們,我們無法檢測到任何其他應用程序是否在全屏模式或不。

但試過這麼多的選項發現全屏幕探測器應用程序在github這個有用的鏈接..:) :)

https://github.com/shinypb/FullScreenDetector.git

相關問題