注册双击桌面(但不能在图标上!)

时间:2012-07-11 22:09:55

标签: objective-c xcode macos cocoa

这是一个问题: 我需要找出用户何时双击OS X桌面,而不是双击图标。

现在,我已经考虑过以下解决方案,但我不确定它们是否可行:

  1. 使用桌面图标位置(不确定如何获取它们)以及桌面图标的大小,理论上我们可以检查一旦用户双击桌面,如果它位于其中一个图标区域内。 Contra:可能没有完美无瑕,因为有些图标可能是透明的,或者没有占据整个图标大小。

  2. 也许有一个变量告诉我们是否点击了桌面上的图标?然后,当用户双击上次桌面时,我们可以检查该变量是否已被激活。

  3. 我当然对其他(更好)的解决方案持开放态度,但它们需要适用于Mac App Store的沙盒。

1 个答案:

答案 0 :(得分:0)

由于种种原因,这可能不适合Mac App Store。

首先,您如何拦截窗外的点击?有一些不同的机制(例如,事件点击),但在沙盒应用程序中不允许这些机制。这是有意的,并且有充分的理由 - 你不应该干扰其他应用程序或操作系统。

最重要的是,很难想象无论你想做什么都不会算作非标准的UI / HIG内容,这是拒绝的另一个原因。

但是,假设这些都不是问题,并且您可以拦截桌面上的点击,那么没有记录的方法来获取桌面上的所有图标,因此您必须直接读取.DS_store文件,这意味着依赖于私人实施信息,这是你不允许做的另一件事。

最后,您必须访问该.DS_store文件。除非您希望用户将(不可见)文件或其父目录拖到您的应用程序或在NSOpenPanel中选择它,否则从沙箱内部获取此类访问权限的唯一方法是通过临时例外权利。您无法使用哪个除非您可以向审阅者证明为什么需要它作为操作系统中的错误或限制的解决方法。那么,你的理由是什么?