2016-04-18 13 views
5

Bir OS X kullanıcısı sadece benim uygulamasında değil, OS X'te herhangi bir dosyayı sürüklerken haberdar edilmeye çalışıyorum. Benim masaüstü veya Finder dosya sürüklemenin başladığınızda işleyicisi çağrıldığını ancak o da çağrıldığını, -Genel dosya sürükleme olayları için kayıt olun Cocoa

[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent* event) { 
    NSPasteboard* pb = [NSPasteboard pasteboardWithName:NSDragPboard]; 
    NSLog(@"%@", [pb propertyListForType:NSFilenamesPboardType]); 
}]; 

Bu kısmen çalışır: aşağıdaki gibi

Bulunduğum yaklaşım NSEvent tarihinde addGlobalMonitorForEventsMatchingMask:handler: kullanıyordum sol fare sürükleme içeren diğer tüm işlemleri gerçekleştirdiğimde bir pencere taşınıyor. Sorun, NSDragPboard'un hala en son sürüklenen dosya URL'sini içermesidir. Dosyayı bıraktığımda ve bir pencereyi hareket ettirmeye başladığımda, bu işlemleri birbirinden ayırt etmek zorlaşıyor.

TL; DR - Sistem genelindeki dosya yükleme işlemleri ile ilgileniyorum. Sürüklenen dosyanın kendisi hakkında bir bilgiye ihtiyacım yok, sadece bir dosya sürükleme işleminin başlatıldığı veya durdurulduğu bilgisi. Bu soru için olası bir çözüm için herhangi bir ipucu takdir ediyorum.

cevap

2

Apple DTS ile konuştuktan sonra, bu büyük olasılıkla bir hatadır. Bu sorun için rdar://25892115 başvurdum. Şu anda orijinal sorumu verilen API ile çözmenin bir yolu yok gibi görünüyor.

Sorunumu çözmek için, imlecin altındaki öğenin bir dosya olup olmadığını anlamak için şimdi Erişilebilirlik API'sını kullanıyorum (kAXFilenameAttribute NULL değil).

İlgili konular