2009-03-11 10 views
2

私はMac用のIMクライアントを作成しています(PythonではObjective C/Cocoaソリューションは問題ありません)。私は、ユーザーが現在映画を見ているのか、フォアグラウンドでゲームをしているのか、画面全体を占める何かをしたいのかどうかを検出したい。もしそうなら、私は新しいIMが入ったときには音を出さないだろうが、もしそうでなければ、私はその音を演奏するだろう。Macでフルスクリーンを検出しています

これはどのように検出できますか?フォアグラウンドのウィンドウをAppleScriptで取得し、そのサイズを見るための方法はありますか?それとも、他のAPIコールがありますか?

ありがとうございました。

+1

vasiに続いて、アプリの設定には、フォアグラウンドでは、通知を抑制する原因になりますか?クイックタイムプレイヤー、最前列、人気ゲーム(短いリスト、悲しいかなか)でデフォルト設定できます。 –

答えて

2

これを実行するかどうかは全くわからないが、apple docsは言う:

はログイン セッションのプレゼンテーションモードでの変更を追跡するには、あなたが kEventAppSystemUIModeChangedカーボン イベントを処理することができる

+0

一部のアプリ(VLCなど)では機能しますが、他のアプリ(Safariや新しいフルスクリーンモードをサポートする他のCocoaアプリなど)では機能しません。 –

9

フルスクリーンを確認するには、各画面でCGDisplayIsCaptured(screenID)と電話してください。

しかし、正しいことを確認しているかどうかはわかりません。 1つのこととして、1つの画面をキャプチャ(「フルスクリーン」)し、もう1つの画面をキャプチャしないようにすることができます。この場合、何をしたいですか?

また、フルスクリーンは実際に何かを意味しますか?私がGarageBandを使って曲を作っているのであれば、フルスクリーンであるかどうかにかかわらず、無作為なサウンドを聞きたくないかもしれません。または、Windows VMをフルスクリーンで実行していても、IMの通知を受けたい場合があります。

+0

または文書を書くだけでも! (特に13インチのラップトップのような小さな画面で) – seaturtle

0

これまでに投稿された2つの解決策は、「実際の」フルスクリーンに適用されますが、多くのフルスクリーンアプリは画面全体にウィンドウを表示するだけです(または、 )。正確にするには、両方をチェックする必要があります。

0

マウンテンライオン(おそらく以前のバージョン)では、分散通知com.apple.HIToolbox.hideMenuBarShownとcom.apple.HIToolbox.hideMenuBarShownを監視することによって、メニューバーの存在を追跡できます。メニューバーは通常==フルスクリーンモードではありません。これはアプリ全体で機能するので、VLCがフルスクリーンになったときや、誰かがフルスクリーンモードでiCalに切り替えるとわかることができます。これを行うには、これら2つの通知を登録する

[[NSDistributedNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(windowDidEnterFullScreen:) 
     name:@"com.apple.HIToolbox.hideMenuBarShown" 
     object:nil]; 

[[NSDistributedNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(windowDidExitFullScreen:) 
     name:@"com.apple.HIToolbox.frontMenuBarShown" 
     object:nil]; 

その後、これらのケースを処理するために、独自のセレクターを作成します。 frontMenuBarShownは常に起動します。そのため、フルスクリーンからの実際の戻り値をキャッチするには、 'didEnter'に続く最初の 'didExit'を見てください...

+0

これは将来的に実装の詳細が削除される可能性があります[こちらを参照](http://www.cocoabuilder.com/archive/cocoa/102291-fullscreen-enter-exit-notification .html)。 – Raviprakash

+0

この通知は、一部のアプリがフルスクリーンモードで、ユーザーがマウスを上に移動したときにポストされ、menuBarがフルスクリーンで表示されます。 –

関連する問題