ЖУРНАЛ ХАКЕР

Нас ребут, а мы крепчаем!

AvaLANche (kolyan@rnc.ru)

Спецвыпуск Хакер, номер #004, стр. 004-114-2


if (ReallyClose) then

Action := caFree

else Action := caNone;

Этот код не будет позволять окну нашего шатдаунера закрываться, пока переменная ReallyClose равна false. А зачем она нужна? Дык надо оставить какой-нибудь бекдор, чтобы самому прогу можно было тормознуть! Помнишь, я говорил, что лейбл пригодится? Время обратиться к этому title`у! Опять тыкаешь два раза крысиной пимпой, но только уже по нему. В появившемся окне с сорцами пишем (внутри функции TitleClick!):

Want2SwitchOff := Want2SwitchOff + 1;

if (Want2SwitchOff = 5) then

begin

ReallyClose := true;

SuperForm.Close();

end;

Что это такое? Ни что иное, как закрывашка (типа открывашки для пива, только наоборот)! Объясняю: после каждого клика по label`у переменная Want2SwitchOff будет увеличиваться на один. Если она станет равной пяти, прога вырубается! Все просто. :)

Да будет свет!

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

progress := progress + 1;

if (progress <= 100) then ProgressBar.StepIt

else

begin

if (ToReboot.Checked) then

ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);

if (ToPowerOff.Checked) then

ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);

end

А теперь догадайся, куда этот код всунуть надо? Нет, туда, куда ты хочешь (конечно, можешь засунуть для опыта :), но в кодинге это не поможет)! Все опять очень просто. Был там у нас таймер, который до сих пор не заюзан. Сечешь фишку? Нужен он для того, чтобы на прогрессбар полоски двигать и, в конце концов, комп зашатдаунить (или ребутить). Поэтому, как обычно, тыкаем по таймеру два раза. Появился обработчик события OnTimer. Это событие обрабатывается после истечения интервала таймера, который изменяется в свойстве Interval (единица - тысячная секунды). Поставь там 100, чтобы у жертвы слишком много времени на раздумье не было. :)

Осталось разобрать сам код. Переменная progress показывает, сколько у бара процентов накипело. Когда progress доходит до ста, начинается процесс отрубания виндов. Очень меня радует, что их можно вырубить вызовом всего одной функции - ExitWindowsEx. :) У функции этой два параметра: первый - флаг, он говорит что делать (EWX_LOGOFF - завершение сеанса пользователя, EWX_REBOOT - ребут, EWX_SHUTDOWN - шатдаун, EWX_POWEROFF - (не догадался?) повер офф), а второй зарезервирован и, по уверениям мелкомягких, игнорируется. EWX_POWEROFF работает только на машинах, которые его поддерживают, т.е. на ATX`ах. Если ты сомневаешься, что за комп у жертвы, лучше поставь EWX_SHUTDOWN, который доведет шатдаун до стадии 'Сеанс Windows завершен. Вы можете выкинуть свой компьютер'. :) Разобрался с флагами? Для них-то и юзаем if-else: он проверяет, какой радиобокс выбран, и делает свое дело. Voila!

Назад на стр. 004-114-1  Содержание  Вперед на стр. 004-114-3