我从不同的地方收到相互矛盾的报告。Engadget 的评论称,InputManager 插件被完全忽略(如果应用程序以 32 位模式加载,则会导致奇怪的行为),但是 这个邮件列表线程 表示如果 32/64 位兼容性正确,它们就能工作。

所以我有两个问题:

  • 我们可以在 Snow Leopard 中使用 InputManager 吗?
  • 如果是的话,它的工作方式是否与 Leopard 中相同。如果没有,什么是好的解决方法(因为 1Password 显然正在修复)?
有帮助吗?

解决方案

如果您确实需要将代码注入应用程序来完成您想要做的事情,请使用 马赫注入.

还有请 提交错误 请求挂钩,以便您将来可以以更安全的方式实现您的软件。

其他提示

http://developer.apple.com/releasenotes/Cocoa/AppKit.html#NSInputManager

现在正式不支持自动加载位于 InputManagers 文件夹中的包。有效输入管理器捆绑包的条件进一步收紧。此功能可能会在未来版本中被禁用。

  1. 现在,有效的安装仅限于 /库 /InputManagers文件夹。其他位置的捆绑包被默默地忽略。

  2. Bundle和 /Library /InputManagers文件夹中的所有文件本身都必须由Root用户和Admin组拥有。捆绑包中没有任何文件可以具有组或其他写入权限。

  3. 使用root特权(getUid()== 0或geteuid()== 0)运行的过程无法加载任何捆绑输入管理器。

  4. 使用车轮组特权运行的过程无法加载任何捆绑输入管理器。

  5. 加载束时,该过程必须在活动工作区会话中。

  6. 不得通过更改用户或组ID(由ISSETUGID()检查)来污染该过程。

  7. 64 位进程无法加载任何捆绑输入管理器。

看起来 Chax(iChat 的 InputManager 插件)现在已切换为 iChat 的应用程序启动器:你运行 Chax.app,它会加载 iChat 并进行额外的 UI 修改。

快速查看小型启动器二进制文件 Chax.app/Contents/MacOS/Chax 中的字符串,似乎他选择了一种比已经提到的 mach_inject 更简单的库拦截技术:相反你 只需设置 DYLD_INSERT_LIBRARIES 在启动目标应用程序之前设置环境变量(如 Linux 中的 LD_PRELOAD)。

当然,这并不会让我最喜欢的 InputManagers、MultiClutch 和 Afloat 再次在 Snow Leopard 中工作——它们非常有用,因为它们可以与所有 Cocoa 应用程序一起工作。仍然不确定这些应用程序的最佳解决方法是什么。

我没有下载 1Password 3 beta 来尝试看看他们在做什么,因为看起来你必须先签署虚拟 NDA。

1Password 3.0 通过以下方式解决了对 InputManager 的需求 搭载 Safari 浏览器插件 API 反而。链接的文章还提供了对 InputManager 的各种代码注入替代方案的非常务实的比较。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top