Mac Kiosk Mode API - 防止用户退出

时间:2012-07-11 14:08:01

标签: objective-c macos keyboard-shortcuts fullscreen kiosk-mode

我正在编写一个Mac(10.6 / 10.7)应用程序,该应用程序在允许用户访问计算机之前对用户进行身份验证(我告诉过我不能允许用户通过传统的登录服务登录)。我已经有了身份验证代码,现在我正在尝试将此登录窗口设置为全屏而无法关闭。

Apple的Kiosk模式API(documentation here)似乎非常适合这种情况,我已经用它来全屏显示窗口,禁用停靠栏/菜单栏/强制退出,所有这些都很好。我遇到的问题是,我似乎无法阻止用户简单地将CMD + Q从应用程序中删除。

当用户可以退出时,在信息亭模式应用程序中没有任何意义,因此我假设我错过了某些内容。以下是我正在做的事情的一个例子:

NSApplicationPresentationOptions options = 
NSApplicationPresentationHideMenuBar|NSApplicationPresentationHideDock|
NSApplicationPresentationDisableHideApplication|
NSApplicationPresentationDisableProcessSwitching|
NSApplicationPresentationDisableAppleMenu| NSApplicationPresentationDisableForceQuit;

[NSApp setPresentationOptions:options];
[[_window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];

结果:全屏窗口,没有菜单栏,没有停靠,无法强行退出,无法远离屏幕的CMD + Tab。 CMD + Q仍然退出应用程序。

1 个答案:

答案 0 :(得分:4)

我猜他找到了与我相同的解决方案,但由于实际上没有在这里回答,我想我会详细说明。

您需要做的是实现以下NSApplicationDelegate方法:

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender

当您的应用处于Kiosk模式时,请在此处返回NSTerminateCancel。