2009-10-11 3 views
2

도크와 마찬가지로 메뉴 막대를 자동으로 숨기는 유틸리티를 작성하고 싶습니다. 이 경우 은 OS X 10.4 전용 응용 프로그램 인 "Menufela"를 복제하지만 Snow Leopard는 복제합니다.시스템 전체 메뉴 막대를 자동 숨기기

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

이 코드를 자동으로 숨 깁니다,하지만 응용 프로그램이 맨 앞 창 때의 메뉴 표시 줄 (도킹). 어떤 응용 프로그램이 열려 있든 관계없이이 행동 시스템을 폭넓게 적용하려면 어떻게해야합니까? ... 따라서 나는이 그것에 대해 이동하는 올바른 방법인지 확실 해요, InputManagers는 것 또한

내가 생각할 수있는

있는 유일한 방법은 InputManager이지만, 내가 전에 하나를 작성하지 않은 레오파드/스노우 레오파드 (Snow Leopard)의 제한된 - this SO question에서 :

그것은이나 그 UID를 변경 한 과정에서, 루트 또는 뻑이 소유하는 과정에서이를 실행되지 않습니다. 가장 중요한 점은 10.5는 입력 관리자를 64 비트 프로세스에로드하지 않으며 32 비트 사용조차도 지원되지 않으며 향후 릴리스에서 제거 될 것임을 나타냅니다.

나는 "향후 릴리스에서 제거 될 것"(스노우 레오파드에서만 작동해야 함)에 관심이 없으며 루트 소유 프로세스가 문제가되지 않는다고 생각합니다 (모든 GUI 응용 프로그램 현재로서는 64 비트 응용 프로그램 (Finder/Safari/등)에 코드를 주입해야합니다.

(원래이 질문은 제가 수퍼 유저의 here이지만, 겉보기에는 기존 유틸리티를 사용하면 StackOverflow와 더욱 관련이 있습니다.)

답변

1

나 자신을 레오파드 눈에 그것을 사용하지 않은,하지만 내가 아는 한, 심지어는 멀리있는 기회를 가지고 시스템 전체를 주입하는 유일한 방법은 mach_star, 그리고 심지어는 조금 까다로운 일이 될 것입니다. 요즘 많은 애플이 적시에 또는 전혀 업데이트하지 못하는 이유는 애플이 쉽지가 않다는 것이다.

1

사랑의 글이 최근 코코아는 메뉴 바 숨기기하는 방법에 대한 정보가 다음 CarbonAPI를 사용하여, 그러나

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

을 (SetSystemUIMode())는 32 비트를 할 응용 프로그램을 필요로하며 외부에서 작동하지 않습니다 응용 프로그램의 범위.

편집 : 조금 더 읽고이 API는 -[NSApplication setPresentationOptions]이 수행 할 수없는 작업을 수행하지 않는 것으로 보입니다.

+0

AppKit에서 사용하기 때문에 32 비트 요구 사항이 없을 것입니다. $ strings/System/Library/Frameworks/AppKit.프레임 워크/AppKit | grep "SetSystemUIMode" - [% @ % s0x % lx] 결과가 % ld 인 SetSystemUIMode (0x % lx, 0x % lx) 호출에 실패했습니다. –

+0

이것은 코드이며 10.5에서 10.7까지의 PPC 및 Intel에서 실행했습니다. . 32 비트 요구 사항이있는 경우이를 실행하지 않았습니다. SetSystemUIMode (kUIModeAllHidden, kUIOptionAutoShowMenuBar); 현재 응용 프로그램에서만 작동하므로 OP 문제가 해결되지 않습니다. OP가 요구하는 것은 IMHO가 보안 문제를 묻는 시스템 해킹입니다. 내 첫 번째 질문은 "왜 화면이 너무 작아서 20 픽셀이 중요할까요?"라고 생각합니다. :) –

2

작은 SIMBL 플러그인을 함께 해킹하여 메뉴 막대를 숨 깁니다. http://github.com/Crazor/MenuBarHider 32 비트 앱에만 국한되지 않는 SetSystemUIMode() Carbon 호출을 사용합니다.