2010-10-18 6 views
7

Başka bir uygulama, uygulamalarım dosya açma isteğinde bulunduğunda, hangi uygulamaların kaynak olduğunu bulmam gerekiyor çünkü farklı eylemler gerçekleştiriliyor.Kaynak uygulamayı bir Apple Event'den nasıl alabilirim?

- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames 

yılında Kod şu anda geçerli:

NSAppleEventDescriptor *currentEvent = [[NSAppleEventManager sharedAppleEventManager] currentAppleEvent]; 
NSAppleEventDescriptor *addrDesc = [currentEvent attributeDescriptorForKeyword:keyAddressAttr]; 
NSData *psnData = [[addrDesc coerceToDescriptorType:typeProcessSerialNumber] data]; 
const ProcessSerialNumber * PSN = [psnData bytes]; 
NSDictionary * info = nil; 
// Same process check 
ProcessSerialNumber currentPSN; 
GetCurrentProcess(&currentPSN); 
Boolean samePSN = FALSE; 
if(PSN && noErr == SameProcess(&currentPSN, PSN, &samePSN) && !samePSN) 
{ 
    info = [(NSDictionary *) ProcessInformationCopyDictionary(PSN, kProcessDictionaryIncludeAllInformationMask) autorelease]; 
} 

Bu her zaman iyi iş gibi görünüyordu. Ama şimdi (10.6.4 çalışan) Ben bazı durumlarda bazen bilgi olmaktan nil sonuçlanan yanlış PSN olsun, bazen de bu sistem Servis açıkçası arıyorum uygulaması değil

BundlePath = "/System/Library/CoreServices/CoreServicesUIAgent.app"; 
CFBundleExecutable = "/System/Library/CoreServices/CoreServicesUIAgent.app/Contents/MacOS/CoreServicesUIAgent"; 
CFBundleIdentifier = "com.apple.coreservices.uiagent"; 
CFBundleName = CoreServicesUIAgent; 
CFBundleVersion = 1093697536; 
FileCreator = "????"; 
FileType = "????"; 
Flavor = 3; 
IsCheckedInAttr = 1; 
LSBackgroundOnly = 0; 
LSSystemWillDisplayDeathNotification = 0; 
LSUIElement = 1; 
LSUIPresentationMode = 0; 

içerdiğini keşfetti için. Başka bir özellik kontrol ettim: keyAddressAttr ve keyOriginalAdressAttr aynıdır. Kulağa ilginç gelen bir başka şey de keyEventSourceAttr idi, ancak bu konuda herhangi bir belge bulamıyorum - döndüğü SInt16 bana yardımcı olabilecek bir pid veya başka bir şey gibi görünmüyor.

Yani benim sorular olacaktır: atıf koduyla yanlış bir şey
1. var mı?
2. keyEventSourceAttr ile ilgili belgeleri nerede bulabilirim?
3. Burada neler oluyor - bu Sistem Servis neden olay yerine sürecimin kaynağı?
4. OpenFiles için sorulduğunda gerçek kaynağı (uygulama) bulmak için güvenilir bir yol nedir? Bu bir olay olduğundan, bir kaynağa sahip olmalı; Son zamanlarda aktif olan uygulamaların kaydını tutmak istemiyorum ve gönderen olabilir.

+0

Apple Olayları hakkında pek bir şey bilmiyorum, ancak bu url'yi açıyorsa, openfiles: // file: & sourceapplication gibi bir şey var: Burada kaynak uygulamanın ne olduğunu biliyorsunuz. Apple'ın Dokümantasyonunu okudunuz mu? İyi Şanslar – theShay

cevap