Mac Kiosk Mode API - 阻止用户退出

4

我正在编写一款Mac(10.6 / 10.7)应用程序,它会在允许用户访问计算机之前对其进行Active Directory域认证(我被告知不能允许用户通过传统的登录服务进行登录)。我已经实现了身份验证代码,现在尝试使此登录窗口全屏并且无法关闭。

苹果的Kiosk Mode API(此处提供文档)似乎非常适合此任务,我已经使用它将窗口变为全屏,禁用了Dock菜单栏/强制退出等功能,所有这些都可以正常工作。但我遇到的问题是,我似乎无法阻止用户通过CMD+ Q退出应用程序。

如果用户可以轻易退出应用程序的话,限制一些功能的kiosk mode应用程序就没有什么意义了,所以我想我可能漏掉了什么。下面是我正在做的示例:

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

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

结果:全屏窗口,没有菜单栏,没有 dock,无法强制退出,也无法从屏幕上 CMD+Tab 切换。CMD+Q 仍然会退出应用程序。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40008592-CH1-SW4 - Eelke
@Blastfire,你是怎么做到的? - Pavan
1
你应该编辑自己的问题并提供正确的解决方案,然后接受它作为正确答案。或者接受正确的答案,这样其他人也可以从中受益。 - forcewill
1个回答

4
我猜他找到了和我一样的解决办法,但是由于这里并没有确切的答案,所以我想详细说明一下。你需要做的是实现以下NSApplicationDelegate方法:
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender

如果您的应用处于Kiosk模式,那么在此处返回NSTerminateCancel。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接