gpt4 book ai didi

macos - 在 Cocoa 中注册全局文件拖动事件

转载 作者:行者123 更新时间:2023-12-03 16:11:25 24 4
gpt4 key购买 nike

当 OS X 用户在 OS X 中拖动任何文件(而不仅仅是在我的应用程序中)时,我尝试收到通知。

我当前的方法是在 NSEvent 上使用 addGlobalMonitorForEventsMatchingMask:handler:,如下所示:

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

这部分有效 - 当我开始从桌面或 Finder 拖动文件时,处理程序将被调用,但是当我执行包含鼠标左键拖动的所有其他操作时,例如,它也会被调用。移动 window 。问题是 NSDragPboard 似乎仍然包含最新的拖动文件 URL,例如当我放开文件并开始移动窗口时,这使得很难区分这些操作。

TL;DR - 我对系统范围内的文件拖动操作感兴趣。我不需要有关拖动文件本身的任何信息,只需要文件拖动操作已开始或停止的信息。如果有任何有关此问题可能解决方案的提示,我将不胜感激。

最佳答案

与 Apple DTS 交谈后,这很可能是一个错误。我已提交rdar://25892115对于这个问题。目前似乎无法使用给定的 API 来解决我最初的问题。

为了解决我的问题,我现在使用 Accessibility API 来确定光标下方的项目是否是文件(kAXFilenameAttribute 不为 NULL)。

关于macos - 在 Cocoa 中注册全局文件拖动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com