在OS X上编写全屏不可关闭窗口

时间:2016-10-28 20:59:26

标签: python c++ objective-c macos

我们有一款游戏正在运行,如果您可以向安全人员发送一封来自某人的电子邮件,则可以获得奖品。这个万圣节我正在设置一个陷阱。

我有一个名为systems-engage的简单程序,它启动一个关键监听器并以编程方式打开我的收件箱。当有人开始使用键盘时,我希望我的程序能够以非常大声的尖叫声对恐怖电影图像进行全屏视觉攻击。

我可以处理上面提到的所有其他内容,我只需要一个简单的方法来打开一个只能通过我在代码中定义的转义序列关闭的全屏窗口。

我在这里寻找最低价的水果(Obj-C,C ++,Java,python ruby​​,javascript hell,无论工作如何快速而肮脏

我读了一篇关于在Obj-C中打开全屏窗口的入门书,但它可以很容易地关闭。这个恶作剧的目的是让我的同事因为入侵我的电脑至少10或20秒而感到羞耻,如果他能够点击Appl-Q我就不能这样做。

万圣节快乐!

1 个答案:

答案 0 :(得分:2)

要使用Cocoa应用程序获得此类内容,您可以将以下代码放入应用程序委托- (void)applicationDidFinishLaunching:(或类似)中:

// Set the key equivalent of the "Quit" menu item to something other than ⌘-Q.
// In this case, ^-⌥-⌘-Q.
// !!! Verify this and make sure you remember it or else you're screwed. !!!
NSMenu *mainMenu = [NSApplication sharedApplication].mainMenu;
NSMenu *appMenu = [[mainMenu itemAtIndex:0] submenu];
NSMenuItem *quitItem = [appMenu itemWithTitle:@"Quit <Your App Name Here>"];
quitItem.keyEquivalentModifierMask = NSEventModifierFlagControl | NSEventModifierFlagOption | NSEventModifierFlagCommand;
quitItem.keyEquivalent = @"q";

// Enable "kiosk mode" -- when fullscreen, hide the dock and menu bar, and prevent the user from switching away from the app or force-quitting.
[NSApplication sharedApplication].presentationOptions = NSApplicationPresentationHideDock
                                                      | NSApplicationPresentationHideMenuBar
                                                      | NSApplicationPresentationDisableProcessSwitching
                                                      | NSApplicationPresentationDisableForceQuit
                                                      | NSApplicationPresentationDisableSessionTermination;

// Remove the window's close button, making it no longer close with ⌘-W.
self.window.styleMask = self.window.styleMask & ~NSWindowStyleMaskClosable;

// Make the window take up the whole screen and make it full-screen.
[self.window setFrame:[[NSScreen mainScreen] frame] display:YES];
[self.window toggleFullScreen:self];

这将创建一个“kiosk”类型的应用程序,只能通过您设置的自定义退出快捷方式关闭(或者,您知道,强行关闭计算机)。演示选项可防止用户访问菜单栏,停靠栏和应用程序切换(通过⌘-Tab)或空格,调出强制退出窗口或启动关闭/重启/睡眠窗口。基本上,请确保您设置了一个键盘快捷键,您记得要终止该应用程序,否则,您将被锁定在您的机器之外,而不是强行关闭它。这是一个完整的PITA。

当然,其中一些自定义也可以在Interface Builder中完成(设置等于“退出”菜单项的键更容易,你可以关闭窗口的关闭控制,如上面的评论中所述) ),但我只想将其作为代码包含在内,以便更透明(而不是上传Xcode项目)。

万圣节快乐!