Делу, как известно, время, но и потехе опять же час :). При чем тут модуль 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 запихнуть
|