Ich versuche, benachrichtigt werden, wenn ein OS X-Benutzer eine beliebige Datei in OS X zieht, nicht nur in meiner App.Registrieren für globale Datei ziehen Ereignisse in Cocoa
Mein aktueller Ansatz wurde mit addGlobalMonitorForEventsMatchingMask:handler:
auf NSEvent
wie folgt:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent* event) {
NSPasteboard* pb = [NSPasteboard pasteboardWithName:NSDragPboard];
NSLog(@"%@", [pb propertyListForType:NSFilenamesPboardType]);
}];
Dies funktioniert zum Teil - die Handler aufgerufen wird, wenn ich eine Datei von meinem Desktop oder Finder starten ziehen, aber es auch genannt wird, wenn ich jede andere Operation, die eine linke Maustaste enthält, z ein Fenster verschieben. Das Problem ist, dass die NSDragPboard
immer noch die letzte URL der gezogenen Datei zu enthalten scheint, z. Wenn ich die Datei loslasse und ein Fenster verschiebe, ist es schwierig, zwischen diesen Vorgängen zu unterscheiden.
TL; DR - Ich interessiere mich für Datei ziehen Operationen systemweit. Ich brauche keine Informationen über die gezogene Datei selbst, sondern nur die Information, dass ein Datei-Drag-Vorgang gestartet oder gestoppt wurde. Ich würde mich über jeden Hinweis auf eine mögliche Lösung für diese Frage freuen.