gpt4 book ai didi

objective-c - 连接特定 USB 设备时自动打开 OS X 应用程序

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

我正在编写一个 OS X 应用程序,并希望在连接特定 USB 设备时打开该应用程序(特别是相机)。

根据我的研究,一种解决方案是在 USB 连接时使用 launchd 自动打开应用程序通过创建具有特定条件的 plist 文件来连接。我能够打开该应用程序时任何 USB 设备都可以像(iPhone 或 Pen Drive)一样连接,但无法找到方法连接相机后打开应用程序。下面是我用于 launchd 的 plist 快照:

<key>LaunchEvents</key>
<dict>
<key>com.apple.iokit.matching</key>
<dict>
<key>com.apple.device-attach</key>
<dict>
<key>bDeviceClass</key>
<integer>0</integer>
<key>bDeviceSubClass</key>
<integer>0</integer>
<key>bDeviceProtocol</key>
<integer>0</integer>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>IOMatchStream</key>
<true/>
<key>IOMatchLaunchStream</key>
<true/>
</dict>
</dict>

</dict>

我的问题是:

  1. 有没有其他方法可以在不使用 launchd 的情况下自动打开应用程序。我看过特定 USB 设备打开时打开的应用程序当 iPhone 连接时,就像 iPhoto 和 iTunes 一样连接,甚至许多自定义应用程序。
  2. 如果除了 launchd 之外没有其他方法的话是否可以将 launchd 修改为仅在相机打开时打开应用程序连接到系统。

预先感谢您的帮助。

最佳答案

分享我的研究和工作解决方案,以便其他人可以在需要时使用。

经过我的进一步研究,OS X ImageCapture 似乎不断将设备映射到 com.apple.ImageCapture2 plist 文件中的自动打开应用程序路径。

如果您在终端上运行defaults -currentHost read com.apple.ImageCapture2,您将获得类似的列表(如果没有应用程序使用自动打开功能,则该列表可能为空):

"00000000-0000-0000-0000-000004A93AAA" =     {
ICADeviceTypeKey = ICADeviceTypeCamera;
autolaunchApplicationPath = "";
};
HotPlugActionArray = (
);
HotPlugActionPath = "";
LastHotPlugActionPath = "";

这里 HotPlugActionPath 是键,任何分配给该键的应用程序路径将在连接到系统时打开。您还可以使用 persistID 字符串 (00000000-0000-0000-0000-000004A93AAA) 和 autolaunchApplicationPath 将特定应用程序分配给特定设备。我以编程方式编辑了这个 plist 文件,并在此处分配了我的应用程序路径,它按我的预期工作。

关于objective-c - 连接特定 USB 设备时自动打开 OS X 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427737/

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