Пятница, 03.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нужен форум на сайте?
Всего ответов: 90
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Разные » Советы Дельферу

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;

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

Автор: Андрей Кульхакерный

Получить ссылку на материал

Категория: Советы Дельферу | Добавил: Барон (02.12.2011)
Просмотров: 1079 | Теги: mciSendString, RebootSystem, SystemParametersInfo, API | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Delphi.NET [3]
Kylix Delphi for Linux [9]
Советы Дельферу [6]
Хитрости в Delphi [2]
Обзор Delphi [45]
Инсталлятор [11]
Пользовательский интерфейс [18]
Примеры Delphi [93]
Функции и процедуры [15]
Разные [31]
Королевство Delphi © 2010-2024
Яндекс цитирования