2012-07-11 74 views
4

我正在编写一个Mac(10.6/10.7)应用程序,它允许用户访问计算机之前对Active Directory域进行身份验证(我被告知可以不允许用户通过传统登录服务登录)。我有认证代码,并且正在尝试使此登录窗口成为全屏并且无法关闭。Mac Kiosk Mode API - 防止用户退出

Apple的Kiosk Mode API(documentation here)看起来非常适合这种情况,我用它将窗口全屏,禁用停靠/菜单栏/强制退出等,所有这些都可以正常工作。我遇到的问题是,我似乎无法阻止用户从简单的CMD +退出应用程序。

当用户可以退出时,有限制的Kiosk模式应用程序没有任何意义,所以我假设我错过了一些东西。下面是我在做什么的例子:

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

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

结果:全屏窗口,没有菜单栏,没有码头,无法强制退出,并不能CMD + Tab从屏幕上移开。 CMD + Q仍然退出应用程序。

+0

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40008592-CH1-SW4 – Eelke 2012-07-11 14:13:36

+0

该诀窍!谢谢! – Blastfire 2012-07-12 13:09:23

+0

@Blastfire的诀窍是什么? – Pavan 2014-02-07 01:54:46

回答

4

我猜他找到了和我一样的解决方案,但由于这里没有真正回答,所以我想我会详细说明它。

你需要做的是落实以下NSApplicationDelegate方法:

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender 

然后回到这里NSTerminateCancel当你的应用程序是在Kiosk模式。