【问题标题】:How to be notified in OS X when a drag operation *starts* anywhere?当拖动操作*在任何地方开始*时,如何在 OS X 中收到通知?
【发布时间】:2011-02-06 08:02:24
【问题描述】:

我想知道是否有任何方法可以让我的应用程序在屏幕上任何地方开始拖放操作时收到通知,即使我没有活动窗口也是如此。

我已经研究了普通的拖放 API,但我没有发现任何这样做的东西。 NSDraggingDestination 协议和 -[NSWindow/NSView registerForDraggedTypes:] 方法允许您在有人拖动某些东西并越过您的窗口时注意到它,但我想在屏幕上的任何位置开始任何拖动操作时注意到它。

关于如何解决这个问题的任何提示?是否有一个标准的 Cocoa API,或者是否有一个私有 API/某种肮脏的黑客来获取这些信息?

提前致谢:)

【问题讨论】:

    标签: objective-c cocoa macos user-interface drag-and-drop


    【解决方案1】:

    看看NSEvent’s +addGlobalMonitorForEventsMatchingMask:handler:。我不确定您是否可以跟踪鼠标拖动,但肯定可以跟踪鼠标按钮向上/向下事件。

    【讨论】:

    • 有趣 - 这有 NSLeftMouseDragged 的​​选项,但我仍然需要确定拖动是否“拾取”了一些东西。
    • 看了一下之后,我认为最好的办法可能是在 NSLeftMouseDragged 事件中轮询 NSDragPboard 以查看拖动的 pboard 是否已更新。当我有时间时,我会整理一些代码,并在这里发布我的结果。 :)
    【解决方案2】:

    我没做过,
    但我假设您需要某种外部软件来监控系统上的所有鼠标活动,并将其报告给您的应用程序(或您的应用程序本身执行此操作),
    因为通常只有当您的应用窗口内有活动时,才会在您的应用中报告拖动事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多