Блокировка экрана в 10,6 - PullRequest
2 голосов
/ 28 января 2010

Как мне поступить с блокировкой экрана, как это делает Keychain, то есть запретить доступ к Dock, menubar, рабочему столу и т. Д. В основном, просто черный экран, к которому я могу добавить поле пароля, чтобы пользователь мог вернуться на рабочий стол?Я хорошо знаком с методом Carbon, но мне нужен метод NSApplication, потому что это приложение полностью из какао.

Спасибо ~

Ответы [ 2 ]

5 голосов
/ 28 января 2010

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

1 голос
/ 28 января 2010

Я полагаю, что замена Какао на API SetSystemUIMode не была введена до 10.6.

Если вы можете жить с кодом Snow-Leopard, ответ будет - setPresentationOptions: на NSApplication.

...