2009-10-11 112 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