2010-01-28 103 views
2

我该如何锁定像Keychain这样的屏幕,这意味着阻止对Dock,菜单栏,桌面等的所有访问。基本上只是一个黑色屏幕,我可以为用户添加密码字段返回到桌面?我非常了解Carbon方法,但我需要NSApplication方法,因为这是一个所有Cocoa应用程序。锁定屏幕在10.6

谢谢〜

+0

Snow Leopard的钥匙链菜单中的锁定屏幕命令不会显示黑屏 - 它会*关闭屏幕*。你可以用外部显示器看到这个;电源指示灯将熄灭(或者,在某些非Apple型号上,更改为备用颜色)。 – 2010-01-28 06:50:56

回答

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如何实现“锁定屏幕”功能,但我无法再找到该应用程序。

+0

非常感谢!我需要这个确切的答案!我正在为新的Macbook和Magic Mouse上的多点触控实施一个特殊的锁屏,这可能是创新[; – 2010-01-30 02:19:41