2

我希望编写一个实用程序来自动隐藏菜单栏,就像停靠栏一样。这将复制仅适用于 OS X 10.4 的应用程序“Menufela”,但适用于 Snow Leopard。

[[NSApplication sharedApplication]
     setPresentationOptions:   NSApplicationPresentationAutoHideMenuBar
                             | NSApplicationPresentationAutoHideDock];

此代码自动隐藏菜单栏(和停靠),但仅在应用程序是最前面的窗口时。无论打开什么应用程序,我将如何在整个系统范围内应用此行为?

我唯一能想到的是一个 InputManager,但我以前没有写过,因此我不确定这是否是正确的方法。

此外,从 Leopard/Snow Leopard 看来 InputManagers 是有限的——来自这个 SO question

它不会在 root 或 whell 拥有的进程中运行它们,也不会在已修改其 uid 的进程中运行它们。最重要的是,10.5 不会将输入管理器加载到 64 位进程中,并且表明即使使用 32 位也是不支持的,并且将在未来的版本中删除。

我不担心“将在未来的版本中删除”(它只需要在 Snow Leopard 上工作),我不认为 root 拥有的进程是一个问题(所有 GUI 应用程序都应该作为当前的),但可能必须将代码注入到许多 64 位应用程序(Finder/Safari/etc)中

(我最初在 SuperUser 上问过这个问题但由于似乎没有现成的实用程序可以实现这一点,因此它与 StackOverflow 更相关)

4

4 回答 4

2

kiosk API 可能是您最好的选择,尽管我已经很多年没有使用它了,也不知道它是否已经被支持了。

http://developer.apple.com/mac/library/technotes/tn2002/tn2062.html

于 2009-10-12T00:20:45.287 回答
2

我拼凑了一个小的 SIMBL 插件来隐藏菜单栏: http: //github.com/Crazor/MenuBarHider 它使用 SetSystemUIMode() Carbon 调用,不限于 32 位应用程序。

于 2010-10-04T18:31:49.857 回答
1

我自己没有在 Snow Leopard 上使用过它,但据我所知,唯一有机会在系统范围内注入的方法是mach_star,即使这样也会有点棘手。如今,Apple 并没有让这一切变得容易,这就是为什么许多旧的黑客无法及时更新或根本没有更新的原因。

于 2009-10-12T00:38:40.767 回答
1

这篇最近的 Cocoa With Love 文章提供了有关如何隐藏菜单栏的信息:

http://cocoawithlove.com/2009/08/animating-window-to-fullscreen-on-mac.html

但是,使用 CarbonAPI ( SetSystemUIMode()) 要求应用程序是 32 位的,并且不能在应用程序范围之外工作。

编辑:再进一步阅读,似乎这个 API 没有做任何-[NSApplication setPresentationOptions]不能做的事情。

于 2009-10-12T04:07:06.070 回答