2012-05-18 3 views
4

В Mac OS X, какой API мне нужно вызвать, чтобы разместить окно поверх не только всего экрана, но и панели меню и док-станции? Кроме того, можно ли эффективно «заблокировать» экран в этом положении, отключив управление миссией, панель запуска и т. Д.?Экран «Заблокировать» на Mac App

Я попытался следующий код в файле реализации в App делегата:

- (void)awakeFromNib { 
    @try { 
     NSApplicationPresentationOptions options = NSApplicationPresentationDisableForceQuit + NSApplicationPresentationDisableHideApplication + NSApplicationPresentationDisableProcessSwitching + NSApplicationPresentationHideDock + NSApplicationPresentationHideMenuBar + NSApplicationPresentationFullScreen; 
     [NSApp setPresentationOptions:options]; 
     NSLog(@"Set presentation options"); 

    } 
    @catch (NSException *exception) { 
     NSLog(@"Error. Invalid options"); 
    } 

} 

NSLog читает «Установка параметров презентации», но ничего не происходит. Какие-нибудь советы?

ответ

5

Это будет в основном включать такие же вещи, как «режим киоска». См. Apple's Kiosk Mode Programming Topic.

Вы в основном использовать -[NSApplication setPresentationOptions:] или -[NSView enterFullScreenMode:withOptions:] с опцией словаря, содержащего ключ NSFullScreenModeApplicationPresentationOptions, значение которого является NSNumber, содержащий такой же стоимости опциона презентационных как метод NSApplication принимает.

+0

Благодарим за отзыв. См. Приведенный выше код, который я разместил в файле делегата приложения. Как ни странно, ничего не происходит. –

+0

Ничего, в том числе нет выхода из вызова 'NSLog()'? –

+0

NSLog действительно читает «Установить параметры презентации», поэтому он не является недействительным. Просто ничего не происходит на экране. –

2

Варианты | 'd вместе с помощью побитового ИЛИ:

NSApplicationPresentationOptions options = NSApplicationPresentationDisableForceQuit | NSApplicationPresentationDisableHideApplication | NSApplicationPresentationDisableProcessSwitching | NSApplicationPresentationHideDock | NSApplicationPresentationHideMenuBar | NSApplicationPresentationFullScreen; [NSApp setPresentationOptions:options];

+0

Использовал эти, и я могу все еще добавить cmd + из моего приложения. Любой совет? – simonthumper

2

В Xcode, создайте новый Cocoa Application, и вставьте следующий код в AppDelegate.m.

- (void)awakeFromNib 
{ 
    // Lock app in full screen mode for 10 seconds. 
    NSApplicationPresentationOptions presentationOptions = (NSApplicationPresentationHideDock | 
                  NSApplicationPresentationHideMenuBar | 
                  NSApplicationPresentationDisableAppleMenu | 
                  NSApplicationPresentationDisableProcessSwitching | 
                  NSApplicationPresentationDisableForceQuit | 
                  NSApplicationPresentationDisableSessionTermination | 
                  NSApplicationPresentationDisableHideApplication); 
    NSDictionary *fullScreenOptions = @{NSFullScreenModeApplicationPresentationOptions: @(presentationOptions)}; 
    [_window.contentView enterFullScreenMode:[NSScreen mainScreen] withOptions:fullScreenOptions]; 
    [_window.contentView performSelector:@selector(exitFullScreenModeWithOptions:) withObject:nil afterDelay:10.0]; 
} 

Вы все еще будете в состоянии выйти из приложения с ⌘Q. Чтобы этого избежать, вы можете удалить эквивалент ключа элемента меню «Выход».

Xcode Interface Builder: Menu Item

Или, вы можете subclass NSApplication and override -sendEvent: ничего не делать, тем самым игнорируя все события (клавиатура, мышь и т.д.), отправленные в приложение.

Смежные вопросы