2011-08-21 22 views
17

Bir Kakao uygulamasında, şu anda başka bir uygulamanın tam ekran modunda olup olmadığını anlamanın bir yolu var mı?Mac OS X Lion: Başka bir uygulamanın tam ekran modunda çalışıp çalışmadığını algıla?

Uygulamam, tüm Spaces üzerinde görünecek şekilde yapılandırıldı ve kendisini öne doğru sıralamak için mouseEntered olaylarını dinliyor.

Sorun, başka bir uygulama tam ekran modundayken ve kullanıcının farenin uygulamamın bulunduğu siyah alanın üzerine gelmesi durumunda, ön tarafa getirilir (birden çok monitörle olur).

Yukarıdaki davranışı yalnızca [self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces]; etkinken gördüm.

Uygulamam için diğer ilgili kod.

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

Kontrol Bu iki bağlantılar dışarı - onlar size bir ipucu verebilir: http://stackoverflow.com/questions/633086/detecting-fullscreen-on-mac VE http: // stackoverflow .com/questions/6815917/how-to-know-if-a-nswindow-is-tam ekran-mac-os-x-aslan – leanne

cevap

1

Hmm, applescript/scriptingbridge kullanarak karar verdiniz mi? Pencerelerin boyutunu elmalılardan alabilir ve ekranın boyutuna göre karşılaştırabilirsiniz. (veya belirli bir uygulamanın hangi ekranda olduğunu bilmiyor musunuz?)
Erişilebilir belirli uygulamalar, pencerelerinde bir 'AXFullScreen' özniteliğine sahip olacaktır. Örneğin bu bazı uygulamalar için çalışır:

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 

gerçek eylem aşağı karbon gibi görünüyor ... MacWindows.h ve CarbonEvents.h onları başvurular için "Tam Ekran" var. Bununla birlikte, bunu araştırmanız gerekecektir.

+0

AppleScript ile yapabileceğiniz her şey yerel kodda daha hızlı yapabilirsiniz. Bu blog yazısı, koddaki AX özelliklerine erişim konusunda bilgilendiricidir: http://cocoatutorial.grapewave.com/tag/axuielementcopyattributevalue/ – ipmcc

1

Bildirimleri kullanın. Örneğin:

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

Aslında, muhtemelen süreçler boyunca gider beri yerine NSDistributedNotificationCenter kullanmak isteyeceksiniz.

Nesnenizi bir gözlemci olarak ekliyorsunuz, böylece başka bir şey tam ekrana gireceğine dair bir bildirim gönderdiğinde, nesneniz bu bildirimi alacaktır.

Seçici, bildirim işlemi tarafından aranan mesaj/yöntemdir.

Ad parametresi, bildirimin gerçek adıdır. Kullanacağınız bir şey için özel bir bildirim oluşturmayacaksanız bunlar standarttır.

Nesne parametresi, bildirimleri almak istediğiniz nesneyi belirtmek içindir. HERHANGİ BİR uygulamanın tam ekrana gittiğini bilmek istediğinizden beri, bu boşluğu bırakmak istersiniz.

Nesnenizi ayrılmadan önce bir gözlemci olarak kaldırmayı unutmayın!

"NSWindowWillEnterFullScreenNotification" sicil kaydı

+0

Bu, yalnızca, uygulamanız başlatıldıktan sonra tam ekran haline gelen uygulamalar için çalışacaktır. Uygulamanız başladığında tam ekran uygulamaları çalışıyorsa, uygulamanıza yeni bildirimler göndermez. – Kyle

+0

Evet, daha önce başlatılan uygulamaya yeniden bildirim gönderilmeyecek. Bu nedenle, eğer Mark, uygulaması başlatıldığında diğer uygulamaların tam ekran açık olup olmadığını bilmek istiyorsa, bu yardımcı olmaz. Ancak uygulaması başlatıldığında, bu noktadan tam ekran moduna geçen uygulamaları algılayacak. – leanne

+0

Bildirim davranışı Mountain Lion'da mı değişti? Çünkü kodunuz bana herhangi bir bildirim vermiyor (dağıtılmış merkezle). İsim parametresini nil olarak ayarladığımda (tüm bildirimleri almak için) tam ekran moduna girerken sadece "com.apple.HIToolbox.hideMenuBarShown" mesajını alıyorum. –

1

yukarıda belirtilen yöntemler

bunları kullanarak, onlar kendi uygulamanızı bildirmek için kullanılabilir, herhangi bir diğer uygulama tam ekran modunda olup olmadığını tespit edemez çalışmıyor ya da değil.

Ancak bu kadar çok seçenek denedikten sonra bu kullanışlı bağlantıyı github'da FullScreen dedektör uygulamasını öğrendik ..:) :)

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