2009-08-27 156 views
2

我收到了来自不同地方的冲突报告。 Engadget的评论显示InputManager插件被完全忽略(如果应用程序以32位模式加载,会导致奇怪的行为),但this mailing list thread表示如果32/64位兼容性正确,它们将工作。Snow Leopard中的InputManager插件(OS X 10.6)

所以我有两个问题:

  • 我们会得到雪豹使用InputManagers?
  • 如果是,它的工作方式与Leopard相同。如果不是,有什么好的解决方法(因为1Password显然正在修复)?
+0

输入管理者不是“插件”,他们是黑客:http://www.macjournals.com/news/inputmanagerhacks.html(不只是处理文字输入,同时修补了整个应用程序中的,如1Password,Inquisitory,Chax 2等)。 – 2009-09-01 08:44:43

回答

3

如果你真的需要将代码注入应用程序来完成你想要做什么,使用mach_inject

而且请file a bug请求挂钩,以便将来可以以更安全的方式实现您的软件。

+1

当我尝试mach_info链接,我得到了'页面未找到'类错误。这里有另一个链接:http://rentzsch.com/mach_inject/ – johne 2009-08-31 18:14:39

+0

对不起,这是堆栈溢出代码中的一个错误(http://meta.stackexchange.com/questions/3657/can-an-unescaped-underscore-be -included-in-a-link),我不小心再次触发。叹。 – 2009-08-31 19:52:29

3

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

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

  1. 有效的安装,现在仅限于 /库/ InputManagers唯一文件夹中。 在其他位置的套装是 默默忽略。

  2. 束中的所有文件和/库/ InputManagers文件夹本身 必须由root用户和 admin组所有。 包内没有文件可以具有组或其他写入 权限。与根特权运行

  3. 进程(的getuid()== 0或geteuid() == 0)不能加载任何束输入管理器。

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

  5. 该进程必须在 加载捆绑包时处于活动工作区会话中。

  6. 进程必须不改变用户或组ID被感染(由 issetugid(选中))。

  7. 没有64位进程可以加载任何bundle输入管理器。

+0

第二个问题? – aditya 2009-08-28 05:56:55

+0

不知道,但GLIMS家伙已经设法获得GLIMS以64位模式下工作:http://www.facebook.com/pages/Glims-for-Safari/93636796317?v=feed&story_fbid=122556062674&ref=nf – 2009-08-28 18:00:43

1

它看起来像Chax(用于iChat中的输入管理插件)现在已经切换到正在为一个的iChat应用程序启动器:您运行Chax.app和它加载的iChat额外UI黑客。

快速查看微型启动程序二进制Chax中的字符串。app/Contents/MacOS/Chax,似乎他正在选择一种比已经提到的mach_inject更简单的库拦截技术:而不是在启动目标应用程序(如Linux中的LD_PRELOAD)之前使用just set the DYLD_INSERT_LIBRARIES环境变量。

当然,这并不让我喜欢的InputManagers,MultiClutch和水上,雪豹再次合作 - 他们是最有用的,因为他们与所有Cocoa程序的工作。仍然不确定这些应用的最佳解决方法。

我没有下载的1Password 3测试版试用,看看他们在做什么,因为它看起来像你必须先签署一份NDA虚。

相关问题