2009-10-11 69 views
2

我希望编写一个实用程序来自动隐藏菜单栏,就像停靠栏一样。这将 复制一个OS X 10.4应用程序“Menufela”,但为雪豹。自动隐藏系统范围内的OS X菜单栏

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

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

我能想到的唯一的事情是输入管理,但我没有以前写的一个,所以我不能确定这是否是去做正确的方式..

而且似乎InputManagers是限于豹/雪豹 - 从this SO question

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

我并不担心“将在未来版本中被删除”(它只需要在Snow Leopard上运行),并且我不认为根拥有的进程是一个问题(所有GUI应用程序应该是当前运行),但大概代码将不得不被注入许多64位应用程序(Finder/Safari/etc)

(我最初问这个超级用户,here,但由于看起来没有现有的实用工具来实现这一点,它与StackOverflow更相关)

回答

1

我还没有使用它雪豹自己,但注入系统范围,即使有机会,因为据我所知的唯一的办法就是mach_star,甚至会有点棘手。现在苹果公司并没有如此简单,这就是为什么许多旧黑客无法及时更新或根本无法更新的原因。

1

这最近可可的爱情文章对如何隐藏菜单栏信息:

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

但是,使用CarbonAPI(SetSystemUIMode())要求的应用是32位和外面的不工作应用范围。

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

+0

由于AppKit使用它,它可能不会带来任何32位的要求。 $ strings/System/Library/Frameworks/AppKit。framework/AppKit | grep“SetSystemUIMode” - [%@%s0x%lx]调用SetSystemUIMode(0x%lx,0x%lx)失败,结果为%ld – 2009-10-12 08:12:13

+0

这是代码,我在PPC和Intel上从10.5到10.7 。如果有32位的要求,我还没有碰到它。 SetSystemUIMode(kUIModeAllHidden,kUIOptionAutoShowMenuBar);这不能解决OP问题,因为它仅适用于当前应用程序。 OP所要求的是对系统的一种破解,恕我直言,它只是在考虑安全问题。我想我的第一个问题是“为什么你的屏幕很小,20像素很重要?” :) – 2011-10-05 14:50:58