2010-01-28 102 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