И ежу понятно, что подшутить над ближним своим - святая обязанность. Вот мы и пошутим. Состряпаем прогу, которая будет вытворять на компе бедняжки всякие пакости - безобидные в основном. Так что не ленись, засучивай рукава, то бишь запуская Delphi. Сейчас мы что-нибудь замастырем.
Ну, чем бедного юзвера можно напугать? Конечно он существо и так замученное, а ну как не открывающимся и закрывающимся приводом CD-ROM-а его помучить. Сидит он, а привод - вжик! - и открылся, а потом - бац! - закрылся. Сказано - сделано. Тем более делов то, пара строчек кода:
mciSendString('Set cdaudio door open wait', nil, 0, handle);
Вернее даже одна строчка. Просто и со вкусом. Главное не забудь включить MMSystem в список используемых модулей.
Если надобно закрыть привод, то все аналогично:
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Кончено глупо просто так щелкать CD-ROM-ом, надо это дело как-то обставить, сообщение там какое выдать. Ну это уж твоя забота - знаем мы, человек ты с хорошим (хоть и извращенным) чувством юмора.
Далее. Почему бы не поменять ему еще обои на рабочем столе? Вот сидит он у себя на работе, делает её, а ты ему - бац! - и тетку голую на экран. Прикольно, да? Нет? Хм... Ну как знаешь. Но все же о том, как это сделать скажем. Вообще, способов есть много, причем довольно мудреных, но мы пойдем самой прямой и ровной дорогой. Для этого просто заставим Windows перечитать файл Win.ini с новым параметром обоев рабочего стола. Это возможно с помощью функции Windows API SystemParametersInfo, таким способом:
SystemParametersInfo(spi_SetDeskWallPaper,0,Addr(BmpFileName),spif_UpdateIniFile + spif_SendWinIniChange);
Поясняем, что BmpFileName - это имя файла с изображением. Параметр spif_UpdateIniFile, записывает изменения в Win.ini, а spif_SendWinIniChange посылает всем окнам сообщение о факте изменения Win.ini. И все.
Ну, так, голую тетку на рабочий стол выставили, с CD-ROM-омом побаловались. Юзверь уже дрожит от страха, ручки тянуться к клаве дабы нажать заветное трехкнопочное. А мы ему по ручкам, по ручкам. Спрячем от него CTRL-ALT-DEL. Текст проги приводим полностью, тем паче, что она очень и очень маленькая. Но весьма симпатишная.
program small; uses WinProcs; {$R *.RES} var D : integer; begin Dummy := 0; SystemParametersInfo( SPI_SETFASTTASKSWITCH, 1, @D, 0); // Вырубили ALT-TAB нафиг SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @D, 0); // CTRL-ALT-DEL туда же end.
Вот-с. Что теперь осталось бедному и разнесчастному пользователю. Нажать на reset? Ну и тут мы его опередим, выключим винды без всякой его помощи. Вод код, работающий под Windows любой сборки:
uses Windows procedure RebootSystem; var handle, ph: THandle; pid: DWORD; luid: TLargeInteger; dummy, priv: TOKEN_PRIVILEGES; ver: TOSVERSIONINFO; begin ver.dwOSVersionInfoSize := Sizeof(ver); GetVersionEx(ver); if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then begin pid := GetCurrentProcessId; ph := OpenProcess(PROCESS_ALL_ACCESS, false, pid); if OpenProcessToken(ph, TOKEN_ADJUST_PRIVILEGES, handle) then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then begin priv.PrivilegeCount := 1; priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; priv.Privileges[0].Luid := luid; AdjustTokenPrivileges(handle, false, priv, 0, dummy, pid); end; end; ExitWindowsEx(EWX_REBOOT, 0); end;
Вот, пожалуй, и все на сегодня. Не шибко много, но зато вышеприведенные примеры позволят скрасить серые часы скуки. Да и пользователя всегда полезно попугать. Ведь напуганный пользователь, вреднее вируса. Народная мудрость, однако.
|