Mac OS X Lion: Detect if another application is running in full screen mode?

后端 未结 4 1954
暗喜
暗喜 2021-01-01 16:09

In a Cocoa app, is there a way to tell if another application currently is in full screen mode?

My application is configured to show up on all Spaces and listens for

相关标签:
4条回答
  • 2021-01-01 16:33

    The above mentioned methods of registering for

    "NSWindowWillEnterFullScreenNotification"

    does not work, they can be used to notify your own app, using them we cannot detect whether any other application is in full screen mode or not.

    However After trying out so many options found out FullScreen detector app at github this usefull link ..:):)

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

    0 讨论(0)
  • 2021-01-01 16:34

    Hmm, have you ruled out using applescript/scriptingbridge? You can get the size of windows from applescript and compare them to the size of the screen. (or do you not know which screen a given app is on?)
    Certain apps which are accessible will have an 'AXFullScreen' attribute on their windows. For example this works for some apps:

      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
    

    The real action seems to be down in carbon... MacWindows.h and CarbonEvents.h have references to "FullScreen" in them.

    You will need to research this though.

    0 讨论(0)
  • 2021-01-01 16:48

    After a great deal of frustration, this worked for me to get a window that floats on all spaces except full-screen ones. I saw the fullScreenNone constant name, and since it described what I wanted, I tried it and found that it worked.

        window.level = .floating
        window.collectionBehavior = [.canJoinAllSpaces, .fullScreenNone]
        window.canHide = false
    
    0 讨论(0)
  • 2021-01-01 16:56

    Use notifications. For example:

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

    Actually, you'll probably want to use NSDistributedNotificationCenter instead, since it goes across processes.

    You're adding your object as an observer, so that when something else posts a notification that it will enter full screen, your object will receive that notification.

    The selector is the message/method you want called by the notification process.

    The name parameter is the actual name of the notification. These are standard, unless you were to create a custom notification for something you would be using.

    The object parameter is for specifying which object you want to receive notifications from. Since you want to know when ANY app is going full screen, you'd want to leave this nil.

    Remember to remove your object as an observer before it's deallocated!

    0 讨论(0)
提交回复
热议问题