2010-03-10 4 views
11

में रिक्त स्थान में कोई स्थान बदलता है तो मान लें कि मैं तेंदुए की स्पेस सुविधा को और अधिक उपयोगी बनाने के लिए एक साधारण कोको ऐप लिखना चाहता हूं।पता लगाना जब मैक ओएस एक्स

: मैं करने के लिए, कहते हैं हर जगह, अलग

  • स्क्रीन संकल्प
  • कीबोर्ड लेआउट
  • मात्रा (ऑडियो के लिए)

तो वहाँ मेरे सवाल के दो हिस्से हैं कॉन्फ़िगर करने के लिए चाहते हैं

  1. मुझे लगता है कि स्पेस के स्वतंत्र रूप से इन तीनों चीजों को संशोधित करने के तरीके हैं, है ना? यदि हां, तो कैसे?
  2. जब कोई स्थान परिवर्तन होता है तो मैं अपने ऐप में कैसे पता लगा सकता हूं, और जब ऐसा होता है, तो निर्धारित करें कि उपयोगकर्ता ने किस स्थान पर स्विच किया है? क्या तेंदुए कुछ वितरित अधिसूचनाएं या कुछ भेजता है?

अद्यतन: मैक ऐप स्टोर पर सभी रिक्त स्थान से संबंधित ऐप्स से निर्णय लेने के लिए ऐसा करने का कुछ सार्वजनिक एपीआई तरीका होना चाहिए।

उत्तर

9

जैसा कि पीटर कहते हैं, 10.6 में आप वर्कस्पेस में परिवर्तन करते समय अधिसूचना प्राप्त करने के लिए NSWorkSpaceNSWorkspaceActiveSpaceDidChangeNotification का उपयोग कर सकते हैं।

आप क्वार्ट्ज एपीआई का उपयोग कर वर्तमान स्थान निर्धारित कर सकते हैं, kCGWindowWorkspace शब्दकोश कुंजी वर्कस्पेस रखती है। जैसे:

int currentSpace; 
// get an array of all the windows in the current Space 
CFArrayRef windowsInSpace = CGWindowListCopyWindowInfo(kCGWindowListOptionAll | kCGWindowListOptionOnScreenOnly, kCGNullWindowID);  

// now loop over the array looking for a window with the kCGWindowWorkspace key 
for (NSMutableDictionary *thisWindow in (NSArray *)windowsInSpace) 
{ 
    if ([thisWindow objectForKey:(id)kCGWindowWorkspace]) 
     { 
      currentSpace = [thisWindow objectForKey(id)kCGWindowWorkspace] intValue]; 
      break; 
     } 
} 

वैकल्पिक रूप से आप अंतरिक्ष निजी एपीआई का उपयोग कर प्राप्त कर सकते हैं, जो आपको ऐसा करने की अनुमति देता है CGSPrivate.h पर एक नज़र डालें:

int currentSpace = 0; 
CGSGetWorkspace(_CGSDefaultConnection(), &currentSpace); 

आप करना चाहते हैं स्क्रीन रिज़ॉल्यूशन को बदलने के लिए this may be helpful वॉल्यूम को बदलने के लिए Quartz services पर देखें।

+0

धन्यवाद। लेकिन अगर अंतरिक्ष में कोई खिड़कियां नहीं हैं तो क्या होगा? क्या सार्वजनिक मामले के माध्यम से उस मामले को संभाला जा सकता है? – Enchilada

+1

अपने ऐप में एक पारदर्शी विंडो बनाएं और इसे सभी रिक्त स्थानों में शामिल करें, फिर विंडो की सरणी में देखें। सभी रिक्त स्थान पर होने वाली विंडो सेट करने के लिए इसका उपयोग करें: [पारदर्शीविंडो सेट चयन चयनकर्ता: NSWindowCollectionBehaviorCanJoinAllSpaces] – BendiLow

+1

'kCGWindowWorkspace' का उपयोग करते समय मैंने देखा कि स्पेस आईडी पहले के बाद रिक्त स्थान के बाद रीबूट के बाद बदलता है (शेर पर)। इससे आईडी को बहुत बेकार बना दिया जाता है ... क्या इसके लिए कोई और सार्वजनिक एपीआई है? (शायद इससे संबंधित: http://openradar.appspot.com/9241430) – Mark

5

एनएसवर्क्स स्पेस अपने स्वयं के अधिसूचना केंद्र पर NSWorkspaceActiveSpaceDidChangeNotification पोस्ट करता है, लेकिन केवल हिम तेंदुए पर।

+1

हां, लेकिन वह अधिसूचना केवल आपको बताती है कि स्थान बदलता है। लेकिन उस अधिसूचना के साथ कोई उपयोगकर्ता इन्फ्लो डिक्शनरी नहीं है जैसे वर्तमान स्थान क्या है, आदि। तो यह वास्तव में एक शक्तिशाली अधिसूचना नहीं है .. – Enchilada

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^