Как отомстить "врагу" средствами Windows.pas

Делу, как известно, время, но и потехе опять же час :). При чем тут модуль Windows? А кому захочется тащить на "вражеский" компьютер софтину в 400 КБ, которая только и может, что спрятать панель задач и иконки? Правильно, тому, кто не знает свойств консольного приложения. Но мы-то с вами тянемся к знаниям ;), так что сейчас создадим полноценную программу, чьи настройки можно будет редактировать, и она будет весить ровно в 40 раз меньше, чем описанная выше.

Итак, создам консольную программу [File>New>Other>Console Application]. Только чур! - шутка будет безболезненной, а то можно и в нос схлопотать.
Итак, наш исполняемый файл можно будет настраивать. Логичнее всего это сделать извне, т.е. из файла с конфигом, чтобы не светиться во "вражеской" системе MS-DOS'овским окошком консоли. Поэтому удалите строку "{$Apptype Console}" и в разделе Uses оставьте только модуль Windows. Теперь ненадолго сверните Delphi и с помощью Блокнота создайте в той же директории, что и наше приложение, текстовый файл следующего содержания:

0{скрыть Crl+Alt+Del}
1{менять системные цвета}
0{менять местами кнопки мыши}
1{показывать сообщение: "Windows must die!"}
1{выключиться после одного сеанса}

Назовите его, скажем, "Config.txt". Он состоит из пяти строк; каждая строка отвечает за "свою" функцию. 0 - не задействовать данную "опцию" во время работы программы, 1 - задействовать (false и true). Справа БЕЗ ПРОБЕЛА помещаются комментарии, чтобы мы не позабыли, какая строка за что отвечает. (Здесь показан пример настроек, где отключение Ctr+Alt+Del и смена кнопок мыши неактивны, а остальное работает.)
Таким образом, нужно только связаться с данным файлом, перебрать каждую строку - с помощью цикла for…to, как вы уже догадались. Когда вся информация будет принята приложением, ее придется постоянно держать в памяти с помощью динамического массива.
Я думаю, вам не нужно объяснять, что есть динамический массив, но, чтобы освежить свою и вашу память, напомню. Продекларируйте:

JokeType: Array[1..10] of Boolean;
Здесь содержится 10 значений, 10 различных переменных типа boolean, способных - вам известно - принимать только значения false или true. И данный-то массив помнит это значение персонально для каждого из своих десяти членов. (Я намеренно сделал их так много, чтобы побудить вас добавить в программу новые функции). Указав в квадратных скобках номер интересующей нас переменной, мы получаем для нее возвращаемое значение true/false, соответствующее ей. Прочее, думаю, понятно из листинга.


program Joke;  
  
uses  
Windows;  
  
const  
SysColorArray: array [0..13] of Integer = (COLOR_ACTIVEBORDER, COLOR_ACTIVECAPTION, COLOR_APPWORKSPACE, COLOR_BACKGROUND, COLOR_BTNFACE, COLOR_BTNTEXT, COLOR_CAPTIONTEXT, COLOR_INACTIVEBORDER, COLOR_INFOTEXT, COLOR_MENU, COLOR_MENUTEXT, COLOR_WINDOW, COLOR_WINDOWFRAME, COLOR_WINDOWTEXT);  
ColorArray: array [0..12] of Integer = (16776960, 0, 16711680, 65535, 16711935, 32768, 8388608, 255, 12632256, 16777215, 15780518, 128, 32896);  
//Цвета хранятся в модуле Graphics.pas,   
//но мы не будем использовать его,  
//а запишем цвета в цифровом виде.  
  
var  
F: TextFile; //наш файл с настройками  
S: ShortString;  
i: Smallint;  
h: hwnd;  
JokeType: Array[1..10] of Boolean; //наш массив  
  
function CheckLine(Line: ShortString): Boolean;  
var  
n1,n2: Smallint;  
begin  
//удаляем из строки комментарии  
Result:=false;  
n1:=pos('{',Line);  
n2:=pos('}',Line);  
delete(Line, n1, n2);  
if Line='1' then result:=true;  
end;  
  
begin  
AssignFile(F, 'config.txt'); //соединяемся с файлом  
Reset(F); //перемещаемся в начало файла  
for i:=1 to 10 do begin //читаем все строки  
ReadLn(F, s);  
JokeType[i]:=CheckLine(S);  
end;  
CloseFile(f); //отсоединяемся  
//начинаем шутить :)  
Randomize;  
if JokeType[1] then //отключаем Ctrl+Alt+Del  
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);  
//запускаем бесконечный цикл:  
while true do begin  
Sleep(10000); //ждем 10 секунд  
//меняем системные цвета:  
if JokeType[2] then  
SetSysColors(1, SysColorArray[random(13)], ColorArray[random(12)]);  
//меняем кнопки мыши местами  
if JokeType[3] then begin  
SwapMouseButton(true);  
Sleep(3000);  
SwapMouseButton(false);  
end;  
if JokeType[4] then MessageBox(h,'Windows must die!','Error',0);  
if JokeType[5] then Halt; //выключаемся  
end;  
end.

Вот и всё. Еще надо бы наше детище в StartUp запихнуть, но об этом - в следующий раз.

Автор: Трофим Роцкий
Теги:
COLOR, JokeType, Windows, false, begin, будет, чтобы, массив, программу, Boolean, цвета, можно, помощью, SwapMouseButton, array, Здесь, CheckLine, комментарии, Smallint, ShortString, строку, SysColorArray, задействовать, Console, Integer, отвечает, ColorArray, строка, random, менять, модуль, кнопки, строки, файла, нужно
Добавлено: 17 Июля 2018 08:02:46 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...