python - 在 OSX 中的另一个应用程序上触发放置事件

标签 python xcode macos drag-and-drop pyqt

我使用了一些 DJ 专有软件 (Native Instruments Traktor)。如果您不熟悉这种东西,只需将它想象成美化的 iTunes:它可以浏览和播放音频文件。

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

我正在设计的文件浏览器的性质意味着我实际上不想拖放东西 - 我只想单击我的应用程序中的一个组件,并获得相同的效果。因此,我正在研究如何从我的文件浏览器应用程序以编程方式触发另一个应用程序上的放置事件。

我选择的平台是带有 PyQt 的 Python,但我开始觉得我可能不得不降低一点。虽然没有做过大量的 C#/Java,所以这可能有点学习曲线(我已经做过很多 ANSI C,但那可能水平...)

这是我得到的结果:

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

所以现在我需要去掉中间人,然后在单击时打包我的 MIME 数据,让 Traktor 认为我已经将它拖放到它上面。

我还深入研究了 OSX 开发人员的文档,特别是 this stuff ,它描述了传递到目标应用程序(拖放目的地)的消息序列。

这一切都是有道理的,但我正处于下降到 C#/Java 以尝试模仿这些消息的边缘,这听起来像兔子洞,如果我能避免的话,我宁愿不冒险。

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

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

我知道我可以通过点击自动化来做到这一点,但我可以想象这真的不可靠,会极大地依赖于窗口的位置等。

提前致谢!

最佳答案

没有尝试过,但是像 CGEventCreateMouseEventCGEventPostToPSN 这样的东西可能会有帮助。 CGEvent.h 和 CGRemoteOperation.h

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

运气。

关于python - 在 OSX 中的另一个应用程序上触发放置事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983832/

相关文章:

python - 在浏览器上绘制 10 亿个 3D 点

python - Pandas .errors.ParserError : Error could possibly be due to quotes being ignored when a multi-char delimiter is used

ios - 对 NSDictionary 进行降序排序。如何使用 `compare:options:` 选择器发送选项?

macos - docker-machine:预创建检查错误: "exit status 126"

objective-c - 通过 API 使用 iTunes 的 Up Next 功能

python - 解析 Scrapy 中的相邻项

python - 程序给出了意外的输出——为什么?

objective-c - 在 IOS5 中将表格单元格对齐到底部

objective-c - 如何解压epub格式的文件?

php - Docker没有实时反射(reflect)变化(Laravel)