Если вы можете избежать написания этого кода самостоятельно, все к лучшему. Обычно это ужасная идея - написать собственный код для блокировки экрана, учитывая количество уязвимостей, которые были обнаружены в коде блокировки экрана за последние годы. Если у вас есть вызов Carbon, который может это сделать, продолжайте и используйте это ... не беспокойтесь о «чистоте» вашего кода Какао.
Однако, если вы решите написать это самостоятельно, вот что вы делаете:
Во-первых, захватите все экраны с помощью 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 реализовал функцию «Блокировка экрана», но я больше не могу найти приложение.