4

在 Mac OS X 中,我需要调用什么 API 才能在整个屏幕以及菜单栏和停靠栏上放置一个窗口?此外,是否可以有效地将屏幕“锁定”到这个位置,禁用任务控制、启动板等?

我在 App Delegate 的实现文件中尝试了以下代码:

- (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 读取“设置演示选项”,但没有其他任何反应。有小费吗?

4

3 回答 3

5

这基本上将涉及与“信息亭模式”相同的事情。请参阅Apple 的 Kiosk 模式编程主题

您基本上使用-[NSApplication setPresentationOptions:]or-[NSView enterFullScreenMode:withOptions:]包含键的选项字典,该键NSFullScreenModeApplicationPresentationOptions的值是包含与该方法采用NSNumber的相同类型的表示选项值。NSApplication

于 2012-05-19T11:30:51.600 回答
3

在 Xcode 中,创建一个新的 Cocoa 应用程序,并将下面的代码粘贴到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 界面生成器:菜单项

或者,您可以子类化NSApplication并重写-sendEvent:以不执行任何操作,从而忽略发送到您的应用程序的所有事件(键盘、鼠标等)。

于 2013-03-03T14:31:54.180 回答
2

这些选项是 |'d 一起使用按位 OR:

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

于 2012-05-30T04:45:39.057 回答