Изучаем механизм блокировки рабочего стола в операционной системе Windows

Администрирование - Сервисные утилиты

Программа блокирует рабочую станцию, если в течении некоторого времени пользователь не проявляет признаков жизнедеятельности на рабочем месте. Разработка выполнена с целью изучения работы внутренних механизмов Windows.
Добавлено отключение компьютера при длительном простое от одного часа до десяти часов.

Изобретаем Велосипед и Модернизируем его…

Ну кто сказал, что системное программирование это сложно? Понятно, что большинство из вас прикладные программисты. Однако это не избавляет вас от обязанностей разбираться в некоторых аспектах работы операционной системы… Иначе можно докатиться до того, что просто смех будет да и только!
Так однажды некие аборигены на Мисте, на полном серьёзе утверждали что Idle это не процесс вовсе, а простой системы. Вспомнилось мне сразу как герой романа М.Булгакова Иван Бездомный так же безапелляционно доказывал Воланду, что бога то нет! Потому, что собственно и не было его никогда!
Так вот я на полном серьезе утверждаю --- Idle это системный процесс PID которого 0 и зависит от этого процесса многое, в том числе и сброс страничного пула памяти… Ну да бог с ним с процессом то! Речь пойдет дальше не о нем. А покопаемся мы на этот раз в системе блокировки рабочей станции, разберемся что там и к чему и сами реализуем этот механизм в своем собственном приложении. Ну что господа? Вперед, за белым кроликом?!
Первое, что мы предпримем, это посмотрим на стандартный механизм Windows. Кликаем правой кнопкой мыша по десктопу, дальше из менюшки свойства переходим на вкладку заставка и ставим флажок защита паролем. Теперь через заданный интервал если мы не будем дергать мышь за хвост и стучать по тёте Клаве всплывет скринсейвер и ещё через несколько секунд вернуться назад можно будет лишь разлочив станцию! Вот именно с этим мы и будем разбираться. Первое, что сразу очевидно, надо работать с сообщениями мыши и клавиатуры. Причем работать надо по крупному т.е. ставить глобальные хуки. Если с клавой все более мение ясно, ставим фильтр по KEYDOWN и отслеживаем нажатия игнорируя отпускания то с мышем чуть сложней. Надо отслеживать перемещения как по X так и по Y т.е. цепляться надо не к событию перемещения мышки, а к координатам курсора в привязке к оси времени. На форме я разместила все нужные контролы, которые помогут наглядно увидеть и понять принцип работы этого механизма!
Так как хуки глобальные логичней всего разместить их в DLL а раз так то писать эту часть будем на чистом Win32API. А вот приложение которое загрузит эту DLL напишем на MFC (благо что это лишь обертка вокруг API).
Запускайте наше приложение, открывайте блокнот или word, пишите текст, двигайте мышкой, меняйте настройки прямо на ходу и наслаждайтесь результатом…
Ну вот и все мы научили наше приложение понимать когда мы работаем, а когда нас нет и надо позаботиться о безопасности (В соответствии с настройкамиCool) и вовремя запереть комп от хищных хакеров снующих тут и там!

P.S. Композиция которая проигрывается когда крутится заставка исполняется группой Space Buddha и называется Self Therapy! В ресурсах она целиком не смотря на то, что проигрывается всего 30 сек. Так что кто хочет, вооружайтесь лопатой т.е. «ресурс-билдером» и копайте…
Всех с наступающим Новым годом! И спасибо всем кто помог мне написать эту статью и реализовать сам WinLocker!

 

Скачать файлы

Наименование Файл Версия Размер
WinLocker
.1229878647 2,84Mb
25.09.09
114
.1229878647 2,84Mb 114 Скачать бесплатно

См. также

Комментарии
1. Olga Olga (olga1974) 86 21.12.08 20:09 Сейчас в теме
Выложить файл целая проблема, потратила на это около часа, потом оказалось,что выложила сразу АЖ четыре раза!!!!
2. Альтаир (Altair777) 635 21.12.08 21:25 Сейчас в теме
(1) > потом оказалось,что выложила сразу АЖ четыре раза!!!!
Лучше сорок раз по разу, чем ни разу сорок раз :-)
dobraleks; olga1974; +2 Ответить
3. Андрей Скляров (coder1cv8) 3292 22.12.08 09:34 Сейчас в теме
4. Olga Olga (olga1974) 86 22.12.08 18:23 Сейчас в теме
(3) Поздравляю!!!Как умудрился из 1с глобальный перехват мыши и клавы устроить???Я так понимаю,что из 1с только с помощью COM технологий можно обращаться к API.
5. AmoreMe (AmoreMe) 171 22.12.08 18:45 Сейчас в теме
(4) Да это так. Причем ActiveX и еже с ним сильно отдает всё той же COM (по факту им же и является). А вот что глобальный хук надо ставить именно в .dll это абсолютно верно! Через COM делать перехват можно с учетом выше сказанного, но это не лучшее решение.
olga1974; +1 Ответить
6. Аркадий Кучер (Abadonna) 3676 22.12.08 18:54 Сейчас в теме
(3-5) Не паримся, а смотрим http://infostart.ru/projects/697/
Моя есть давно написаль ;)
7. AmoreMe (AmoreMe) 171 22.12.08 19:14 Сейчас в теме
Посмотрел и что? Разве там идет речь о перехвате сообщений в любых приложениях? Реализовывать через COM изврат... Если только в этом нет сугубой необходимости.
8. Андрей Скляров (coder1cv8) 3292 22.12.08 19:19 Сейчас в теме
(4,5,6) Никаких API, COM, ActiveX и длл!!! Просто ловкость рук и никакого мошенничества! )) http://infostart.ru/projects/2591/
9. Аркадий Кучер (Abadonna) 3676 22.12.08 19:21 Сейчас в теме
(8) Ну, учитывая, что dll - она и в Африке dll, там можно было и не указывать конкретый процесс, был бы глобальный. А в простой dll (без ком-извратов) это реализовано в http://infostart.ru/projects/798/
10. Аркадий Кучер (Abadonna) 3676 22.12.08 19:26 Сейчас в теме
+(9) Не на (8), а на (7) - опечатался
11. AmoreMe (AmoreMe) 171 22.12.08 19:36 Сейчас в теме
Что то не понял (8) а каких процессах речь идет? Можно конечно инжект DLL сделать и в системный процесс, методов много, а потом экспортировать нужные функции, но как это относится к обсуждаемой теме глобальные хуки на события мыши и клавиатуры?
12. AmoreMe (AmoreMe) 171 22.12.08 19:44 Сейчас в теме
Я тоже промахнулся конечно же не 8 а 9.
13. Аркадий Кучер (Abadonna) 3676 22.12.08 19:46 Сейчас в теме
А чего обсуждать тему глобальной ловушки? Достаточно просто прочитать:
function SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD): HHOOK;
Функция SetWindowsHookEx устанавливает определенную приложением процедуру ловушки в цепочку ловушек.
Приложение устанавливает процедуру ловушки, чтобы контролировать некоторые типы событий в системе.
Процедура ловушки может контролировать события, связанные со специфической нитью или со всеми нитями в системе.
Параметры:
idHook: Определяет тип процедуры ловушки, которая будет установлена. Этот параметр может иметь одно из значений WH_.
lpfn: Указывает на процедуру ловушки. Если dwThreadId параметр, равен нулю или определяет идентификатор нити, созданного другим процессом,
параметр lpfn должен указать на процедуру ловушки в библиотеке динамических связей (DLL).
Иначе, lpfn может указывать на процедуру ловушки в коде, связанном с текущим процессом.
hMod: Идентифицирует DLL, содержащую процедуру ловушки, на которую указывает параметр lpfn.
Параметр hMod должен быть установлен как NULL, если параметр dwThreadId определяет нить, созданную текущим процессом и если процедура ловушки - внутри кода, связанного с текущим процессом.
dwThreadId: Определяет идентификатор нити, с которым процедура ловушки должна быть связана.
Если этот параметр - нуль, то процедура ловушки связана со всеми существующими нитями.

14. AmoreMe (AmoreMe) 171 22.12.08 19:53 Сейчас в теме
Это зачем столько текста? Ведь и так всё очевидно. Вопрос был о каких процессах идет речь?
15. Аркадий Кучер (Abadonna) 3676 22.12.08 19:56 Сейчас в теме
(14) В (9) как раз и был простой ответ: там хук ставится конкретно на процесс 1С, вызваший библиотеку, НО, если бы я там не проставил конкретный dwThreadId - она бы за милую душу ловила ВСЕ процессы
16. AmoreMe (AmoreMe) 171 22.12.08 19:57 Сейчас в теме
Dll проецируется на адресное пространство процесса который её загружает (в общем случае) и далее её код исполняется так как родной код этого процесса... (в частности)
17. Аркадий Кучер (Abadonna) 3676 22.12.08 19:58 Сейчас в теме
+(15) Есть такая фича, недокументировано - из конкретного приложения запросто ставится ГЛОБАЛЬНЫЙ хук без всяких DLL
18. AmoreMe (AmoreMe) 171 22.12.08 19:59 Сейчас в теме
Ещё раз позволю себе повториться, что ловить надо не процессы, а события мыши и клавы в данном конкретном случае... Увы!
19. AmoreMe (AmoreMe) 171 22.12.08 20:01 Сейчас в теме
(17)Да я и не отрицал этого что можно это делать (На машине можно задним ходом пердвигаться но лучше нормально как все)!
20. AmoreMe (AmoreMe) 171 22.12.08 20:03 Сейчас в теме
А вообще приятно, что на этом сайте можно не только на темы 1С поговорить!?
21. Аркадий Кучер (Abadonna) 3676 22.12.08 20:04 Сейчас в теме
(18) Под "она бы за милую душу ловила ВСЕ процессы", ясно дело, подразумевалось "ловила бы сообщения (события) всех процессов"
22. AmoreMe (AmoreMe) 171 22.12.08 20:15 Сейчас в теме
(21) Спасибо за беседу вынужден откланяться! Удачи!
23. Василий Демидов (Душелов) 3796 22.12.08 21:50 Сейчас в теме
24. Павел Жуков (Mytilus G.) 24.12.08 01:09 Сейчас в теме
Где тут "изобретаем велосипед", я понял. А где "модернизируем его"? Если под модернизацией понимается Space Buddha, которую, как я предполагаю, все с пеной изо рта бросились выковыривать из таблицы образа, то заголовок должен звучать: "Изобретаем велосипед и засоряем его ресурсы".
Не хочу показаться невежливым, но, по моему скромному мнению, так оно и есть. И я готов, при желании Оли, выслушать ее гневные отзывы о моем посте на тему неуважения труда и стремления к воплощению идей.
25. Аркадий Кучер (Abadonna) 3676 24.12.08 03:33 Сейчас в теме
(25)Не, все правильно! Надо было только Deep Purple Into The Fire :)
26. AmoreMe (AmoreMe) 171 24.12.08 11:18 Сейчас в теме
(24) А чего засоряем то? Ресурсы для того и нужны чтоб в них хранить картинки файлы и прочее... Что не знал? Сарказм твой не уместен! А не вежлив, так это пробелы твоего воспитания...
27. Аркадий Кучер (Abadonna) 3676 24.12.08 11:22 Сейчас в теме
(26,24) Ну, собственно, такая реакция была ж заранее спрогнозирована ;)
"В ресурсах она целиком не смотря на то, что проигрывается всего 30 сек. Так что кто хочет, вооружайтесь лопатой т.е. «ресурс-билдером» и копайте…"
28. AmoreMe (AmoreMe) 171 24.12.08 11:34 Сейчас в теме
Я слышал Оля доработала прогу... Теперь она будет отрубать комп в случае длительного простоя! Но это ведь учебная прога хотя и полнофункциональная...
Оля, прошу прощения что "Поперёк батьки в пекло"...
29. AmoreMe (AmoreMe) 171 24.12.08 11:39 Сейчас в теме
А вот анонс надо исправить ----> "операционной систью изучения работы внутренних механизмов"<-----
30. AmoreMe (AmoreMe) 171 24.12.08 12:06 Сейчас в теме
Кстати + к посту (28) Это в условиях кризиса может быть очень актуально. Экономим электроэнергию. Нет юзера на месте больше часа - вырубаем. А если в конторе 300 компов и 150 из них без дела электроэнергию потребляют? Хотя сам я комп стараюсь вообще поменьше перезагружать.
31. Павел Жуков (Mytilus G.) 24.12.08 13:43 Сейчас в теме
(26, 28, 30) Похоже, здесь какое-то недопонимание. Картинки, файлы и прочее надо хранить в папках "Мои рисунки", "Мои документы" и тому подобное, но не в ресурсах. Ресурсы предназначены все-таки для других целей. Так что не стоило переходить на личности, пытаясь задеть меня своим проявлением злобы в ответ на критику, так как про мое воспитание тебе все равно ничего не известно (оффтоп). А насчет отрубания компа в конторе - так это уже давно реализовано стандартными инструментами серверных систем. Честь имею!
32. AmoreMe (AmoreMe) 171 24.12.08 16:11 Сейчас в теме
(31) Критика не конструктивная! Хотя если бы я подозревал, что господин Mytilus G. не имеет отношения к программированию под Windows то может быть и смягчил тон... Теперь насчёт "проявления злобы". Ты оказался невежлив, хотя сам и предполагал, что это так?! Так чего хочешь получить в ответ? Сила противодействия равна силе прямого действия... Если ты не имеешь понятия о структуре файла РЕ формата, так зачем высказываться по этому поводу? В многих случаях хранить звук и видео именно в ресурсах .exe файла намного предпочтительней чем в той же .dll в тех же ресурсах или просто раскидав их по папкам.
olga1974; +1 Ответить
33. AmoreMe (AmoreMe) 171 24.12.08 16:21 Сейчас в теме
Ну поверь мне Mytilus G. Я не хочу задеть твое самолюбие... И уж тем более выделиться за твой счет! Поэтому обещаю, впредь все ляпсусы всех авторов буду комментировать только с явным позитивом, не взирая на чины и ранги! А так же знания и опыт... Удачи!
34. Olga Olga (olga1974) 86 24.12.08 19:44 Сейчас в теме
Всем спасибо за комменты, мне важно каждое мнение, программа доработана скоро будет выложена,AmoreMe и Abadonne, отдельное....
35. Olga Olga (olga1974) 86 24.12.08 19:46 Сейчас в теме
(28)>Оля, прошу прощения что "Поперёк батьки в пекло"..
Не за что дорогой,развлекайся!!!!!!!
36. Olga Olga (olga1974) 86 24.12.08 19:50 Сейчас в теме
(31) для тебя дорогой!!!!
Графика которая отображается в программе отрисована API.
А в ресурсах лежит только звуковой файл,что соответствует всем канонам программирования под Windows.
37. Olga Olga (olga1974) 86 24.12.08 19:53 Сейчас в теме
38. Павел Жуков (Mytilus G.) 25.12.08 01:01 Сейчас в теме
Стоп! Я ни в коем случае не отрицаю, что графику, звук для приложения, таблицу строк в конце концов, конечно, логично воткнуть в ресурсы. Безусловно, если они там нужны. Если реагирующие на мой пост адекванто подошли бы к выраженному мной мнению, а не выискивали в критике оскорбления, то обязательно заметили бы, что я говорил совершенно не об этом. Запихните в ресурсы хоть Ленинскую библиотеку, чтобы отображать в приложении по одному абзацу из каждой книги - мне все равно. Пусть это будет каноном программирования.
Неконструктивная критика - это высказывание, умаляющее некую часть объекта этой критики. Основной частью моего первого поста был вопрос. Специально для тех, кто не задумывается о том, отчего возникает неудовлетворяющее их мнение в комментарии и переходят на личности, я поставил этот вопрос в самом начале. Однако и это не помогло - ответа я так и не получил.
Теперь насчет моих невежливости и воспитания. Я искренне, без какого-либо сарказма и иронии, приношу Ольге свои извинения за необдумано резкую формулировку и прошу у нее прощения за акцентирование исключительно субъективного мнения. Надеюсь, что это поможет отвлечь уважаемую публику от обсуждения личных качеств отдельно взятого Mytilus G.

P.S.
Блокировка клавиатуры: rundll32 keyboard,disable
Блокировка мыши: rundll32 mouse,disable
Запуск по времени простоя можно организовать в "Назначенные задания" панели управления Windows.
39. Павел Жуков (Mytilus G.) 25.12.08 01:40 Сейчас в теме
P.P.S.
Заработался я. Команды выше в NT не работают. Для 2000/XP/Vista указываем rundll32.exe user32.dll,LockWorkStation
40. Аркадий Кучер (Abadonna) 3676 25.12.08 04:51 Сейчас в теме
(39) Точно заработался
hDLL := LoadLibrary('user32.dll');
@myBlockInput := GetProcAddress(hDLL, 'BlockInput');
myBlockInput(true);
и всех дел
41. Olga Olga (olga1974) 86 25.12.08 18:35 Сейчас в теме
(38) извинения приняты.
А вообще смысл программы не в том, что бы просто залочить станцию, а в том что бы "отследить" работу пользователя за компьютером,смысл вами не понят до конца.
42. Olga Olga (olga1974) 86 25.12.08 18:40 Сейчас в теме
(39)А вообще,что бы залочить станцию как предлагаете вы достаточно нажать пару клавиш WIN+L
43. Павел Жуков (Mytilus G.) 25.12.08 23:16 Сейчас в теме
(40) Мне мой вариант больше нравится. Его компилить не надо.
44. Аркадий Кучер (Abadonna) 3676 26.12.08 03:46 Сейчас в теме
(43) Вариант "не компилить" изложен в (42), а есть еще три пальца ;)
45. Olga Olga (olga1974) 86 26.12.08 20:05 Сейчас в теме
Кстати,добавлено отключение компьютера при длительном простое от одного часа до десяти часов.
46. Павел Жуков (Mytilus G.) 26.12.08 23:17 Сейчас в теме
(44) Здесь говорилось об автоматизации. Три пальца в Назначенные задания не засунешь. ))
47. AmoreMe (AmoreMe) 171 27.12.08 09:20 Сейчас в теме
(46) Если об автоматизации говорить, то как реализовать это через стандартный sheduler? Даже самая простая операция выключение компьютера не гарантирована... Допустим (сегодня 01.01.2009 12:00:00) пользователь настроил отключение на 01.01.2009 24:00:00 и забыл об этом! Понадобилось ему дату передвинуть назад ну чтоб поправить что-то в программе которая проверяет системное время, он выставил 30.11.2008 12:00:00! И что будет? Будем месяц ждать автоматизации? Значит к системной дате привязываться в случае автоматизации нельзя... Я хочу быть уверенным, что все произойдет через такое время как я запрограммировал! А как отследить что мы все еще на рабочем месте, трудимся? А вот написать приложение которое не только 3 но и все 33 пальца засунет куда угодно, без проблем... Делаем вывод -- Назначенные задания применяем там где не особо критично будет ли оно вообще выполнено, например запустим антивирусный сканер ночью. Много нелестных отзывов от системных администраторов приходилось мне слышать о назначенных заданиях в Windows! Кстати вариант с синхронизацией времени на сервере не предлагать. Проходили уже! Да и речь идет о конкретной машине,конкретного пользователя...
48. Павел Жуков (Mytilus G.) 27.12.08 17:52 Сейчас в теме
(47) Шедулер, бесспорно, не панацея. Но я сам системный администратор и по себе знаю, что настроить его на бесперебойную работу легче и быстрее, нежели искать необходимое ПО, знакомиться с его возможностями и разбираться в настройках или создавать собственную реализацию. Чтобы не было недоразумений, сразу поясню, что отталкиваюсь исключительно из собственного опыта, а кому-то может быть проще и легче работать именно с приложениями. Теперь насчет примера отключения компа. Ту же самую ошибку (что-то изменил, что-то забыл) можно сотворить и с программным обеспечением, завершающим работу Виндов. У меня в офисе компьютеры отключаются заданием, выполняя команду "shutdown -f -s t 0" каждый день в 22:00, но не раньше 30 минут простоя.
49. AmoreMe (AmoreMe) 171 27.12.08 19:20 Сейчас в теме
(48) А как определяется простой? С командной то строкой и так ясно...
50. Павел Жуков (Mytilus G.) 27.12.08 19:22 Сейчас в теме
(49) Непосредственно в задании. Там есть опции запуска по простою.
51. AmoreMe (AmoreMe) 171 27.12.08 19:28 Сейчас в теме
Да уж... В хрюше? Таки нет...
52. AmoreMe (AmoreMe) 171 27.12.08 19:35 Сейчас в теме
53. AmoreMe (AmoreMe) 171 27.12.08 19:43 Сейчас в теме
Ну какие выводы? Как и ожидалось плевать хотел планировщик на эту опцию! спецом всё настроил и мышкой "ерзал" старательно, всё равно сработал. Сразу опять всех админов вспомнил что плюются от планировщика Windows...
54. AmoreMe (AmoreMe) 171 27.12.08 19:47 Сейчас в теме
А на работе у нас после 5 срабатываний перестала база выгружаться... А самопальный работает! Какие ещё примеры то нужны?
55. Olga Olga (olga1974) 86 27.12.08 22:05 Сейчас в теме
Разработка выполнена с целью изучения работы внутренних механизмов Windows. Это и в заголовке написано. Тут копья особенно ломать то нечего. Изучила, воплотила, ну и молодец Я!
(48)"Ту же самую ошибку (что-то изменил, что-то забыл) можно сотворить и с программным обеспечением" - нельзя, в моей программе сработает любая настройка! В отличие от планировщика. Ещё раз убедилась, что не особенно то ты и смотрел её... А в этой ветке идет речь именно о ней!
56. Сhe Burashka (CheBurator) 27.01.09 01:01 Сейчас в теме
я просто с вас офигеваю...
57. Olga Olga (olga1974) 86 29.01.09 19:11 Сейчас в теме
Оставьте свое сообщение