Среда, 15.01.2025, 23:16
AMAR Inc.
Приветствую Вас Гость | RSS
Главная Программирование Регистрация Вход
Меню сайта

Категории каталога
Разные статьи [48]
Система [62]

Главная » Статьи » Delphi » Разные статьи

Delphiйские штучки
  И ежу понятно, что подшутить над ближним своим - святая обязанность. Вот мы и пошутим. Состряпаем прогу, которая будет вытворять на компе бедняжки всякие пакости - безобидные в основном. Так что не ленись, засучивай рукава, то бишь запуская 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;

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


Категория: Разные статьи | Добавил: amar-runyak (24.09.2007)
Просмотров: 1000 | Рейтинг: 5.0/1 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Copyright AMAR Inc. © 2025