понедельник, 22 августа 2011 г.

Бесконечное выключения монитора

Встречал на некоторых форумах просьбы о коде, который будет выключать монитор,( и не включать до нажатия определенной клавиши). Напишу, как можно сделать такое. Писать буду на своем любимом языке - Ассемблере, а конкретно, MASM32. Не стоит пугаться Ассемблера, под win32 он не особо сложный, ведь большинство операций выполняется с помощью WinApi.
Сначала объявляем необходимые инклуды и директивы.
Детально, что это и для чего, писать не буду.

.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc


includelib \masm32\lib\masm32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

.DATA


.CODE


Далее - собственно, код:
Start:
mov esi,20
Block:
invoke SendMessage, HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2
Invoke GetAsyncKeyState,VK_ESCAPE
cmp eax,0
jz Block

invoke ExitProcess,0
end Start


Что происходит? Апи SendMessage отправляет системное сообщение о выключение монитора; далее, функция GetAsyncKeyState асинхронно проверяет, нажата ли клавиша ESCAPE (можно поменять на другую). Точнее, проверка идет в следующей строке - в случаи неудачи функция GetAsyncKeyState возвращает в регистр еах значение 0. Программа "смотрит", если в еах 0 - опять идем на метку Block, зацикливаем процедуру. jz означает "jump if zero", т.е. переход на метку, если в регистре еах значение 0. Если же значение не равно 0 - прога завершается функцией ExitProcess. Монитор включится автоматически, впрочем, это можно и сделать с помощью той же SendMessage


invoke SendMessage, HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1

p.s.Конечно, этот способ очень простой. Получить клавишу можно и многими другими способами, хуки клавиатуры, отслеживание событий wm_keydown, и так далее, вплоть до мониторинга сsrss. Возможно, в дальнейшем я опишу что-нибудь из этого, т.к. данный способ (что я привел выше) не особо подойдет, например, для кейлоггера (потребляет много системных ресурсов) При выключение монитора, естественно, это не столь важно.


Комментариев нет:

Отправить комментарий