在OSX中的另一个应用程序上触发掉落事件

Stu*_*Cox 9 python macos xcode drag-and-drop pyqt

我使用一些专有软件进行DJ(Native Instruments Traktor).如果您不熟悉这种事情,只需将其视为一个美化的iTunes:它浏览并播放音频文件.

我想为此构建一个自定义文件浏览器应用程序,但没有任何类型的API.这,但是,允许音频文件拖动,然后从文件系统,这是一个很好的开始下降.

我正在设计的文件浏览器的性质意味着我不想实际拖放东西 - 我只想在我的应用程序中单击一个组件,并具有相同的效果.所以我正在寻找从我的文件浏览器应用程序以编程方式触发另一个应用程序上的drop事件的方法.

我选择的平台是Python和PyQt,但我开始觉得我可能需要更低级别.虽然没有做过大量的C#/ Java,但这可能是一个学习曲线(我已经完成了很多ANSI C,但这可能太低了 ......)

这是我有多远:

  • 我做了一个非常简单的PyQt应用程序
  • 我拖动应用程序中的QLabel时可以创建QDrag对象
  • 我可以附加所有正确的MIME数据来表示音频文件
  • 因此,如果我将QLabel从我的应用程序拖放到Traktor中,它会识别音频文件并播放它 - 好时光

所以现在我需要删除中间人,然后点击,打包我的MIME数据,让Traktor认为我已经将它拖放到它上面.

我还在OSX开发人员的文档中做了一些深入研究,特别是这些东西,它描述了传递给目标应用程序(丢弃目标)的消息序列.

这一切都是有道理的,但是我正濒临下降到C#/ Java试图模仿这些消息,这听起来像兔子洞,如果我可以避免它,我宁愿不冒险.

所以,在我做之前......

  1. 这甚至可能吗?或者我是否会遇到某种跨应用安全障碍等?(删除目的地只直接从操作系统或其他东西接受消息)
  2. 如果是,有没有更简单的方法呢?理想情况下使用PyQt/Tkinter/wxPython ......?

我知道我可以用点击自动化做到这一点,但我可以想象,真的不可靠,会大量依赖窗户的位置等.

提前致谢!

Dad*_*Dad 2

没有尝试过这个,但是像CGEventCreateMouseEvent和 之类的东西CGEventPostToPSN可能会有所帮助。CGEvent.h 和 CGRemoteOperation.h

我还想知道目标应用程序是否可能响应苹果事件 - 如果确实如此,您可以创建苹果事件并将其发送给它,这样会更干净。我会尝试运行 AppleScript Editor 或 Automator,并在相关应用程序上打开字典,看看它是否有可以执行您想要的操作的事件字典。

运气。