2016-04-18 38 views
5

我試圖在OS X用戶在OS X中拖動任何文件時發出通知,而不僅僅是在我的應用程序中。在Cocoa註冊全局文件拖動事件

我目前的做法是使用上NSEventaddGlobalMonitorForEventsMatchingMask:handler:,如下:

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

此工程部分 - 當我開始拖動從桌面或Finder文件處理程序被調用,但是它也被稱爲當我執行其他包含鼠標左鍵拖動的操作時,例如移動一個窗口。問題在於NSDragPboard似乎仍包含最新的拖曳文件網址,例如當我放開文件並開始移動窗口時,很難區分這些操作。

TL; DR - 我對系統文件拖動操作感興趣。我不需要關於拖拽文件本身的任何信息,只是文件拖拽操作已經啓動或停止的信息。我將不勝感激任何暗示此問題的可能解決方案。

回答

2

在與Apple DTS交談之後,這很可能是一個錯誤。我已經爲此問題提交了rdar://25892115。目前似乎沒有辦法用給定的API解決我原來的問題。

爲了解決我的問題,我現在使用Accessibility API來確定光標下面的項是否是一個文件(kAXFilenameAttribute不是NULL)。