在10.6中锁定屏幕

Adi*_*yam 2 macos cocoa objective-c osx-snow-leopard

如何锁定像Keychain这样的屏幕,意味着阻止所有访问Dock,菜单栏,桌面等等.基本上只是一个黑屏,我可以添加一个密码字段,让用户返回桌面?我很清楚Carbon方法,但我想要NSApplication方法,因为这是一个全Cocoa应用程序.

谢谢〜

Die*_*Epp 5

如果你不能自己编写这些代码,那就更好了.考虑到多年来在屏幕锁定代码中发现的漏洞数量,编写自己的代码来锁定屏幕通常是一个可怕的想法.如果你有一个可以做到的Carbon调用,请继续使用它...不要担心Cocoa代码的"纯度".

但是,如果您决定自己编写,请执行以下操作:

首先,使用CoreGraphics捕获所有屏幕.请参阅:http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/QuartzDisplayServicesConceptual/Articles/DisplayCapture.html

接下来,创建一个新的NSWindow并将其放在用于捕获屏幕的窗口前面.您必须调用CG函数来获取覆盖每个屏幕的黑色窗口的"顺序",并在其前面订购新窗口.通常情况下,黑色窗口有一个向前的顺序,一切都在它后面.在窗口中输入密码字段.千万不要使用普通的文本字段或编写自己的代码输入密码.密码输入字段中包含大量特殊代码,因此您无法从中复制文本,而其他程序在您输入密码字段时无法听到击键.所以使用Apple提供的那个.

最后,将计算机置于"信息亭模式".此模式允许您禁用alt-tab,用户切换,菜单栏和停靠,甚至强制退出的功能.请参阅:http://developer.apple.com/mac/library/technotes/KioskMode/Introduction/Introduction.html

这不是很多代码,只是使用了一些不同的API,因此您将花费大部分时间在API文档之间进行反复.我建议将屏幕锁定代码编写为自己的应用程序(只需在Xcode项目中添加新的应用程序目标),然后将屏幕锁定器放入应用程序包中.这曾经是(截至10.4)Apple Remote Desktop如何实现"锁屏"功能,但我再也找不到该应用了.