Мы уже разобрали несколько интересных шуток, использующих перебор всех окон на Рабочем столе, а сейчас увидим, как можно подшутить с помощью перебора элементов на всех видимых окнах. Давайте найдем все элементы управления на окнах и сделаем их недоступными или просто спрячем.

Создайте новое приложение и поместите на форму одну кнопку. По ее нажатии запишем вызов функции EnumWindows:

"
procedure TClearWindowForm.ButtonlClick(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc. 0);
end:

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

function EnumWindowsProcCh: hwnd: lparam: Integer): BOOL:
stdcal1;
begin
if IsWindowVisible(h) then
EnumChildWindows(h. @EnumChildWmdowsProc. lparam). Result := true:
end:

В этой функции происходит проверка, если окно видимо, то запускается перебор дочерних окон с помощью функции EnumChildWindows, имеющей следующие параметры:

• окно, внутри которого надо искать;
• функция, которая будет вызываться для каждого найденного элемента управления;

• произвольный параметр.

Функция EnumChi 1 dWi ndowsProc выглядит следующим образом:

function EnumChildWindowsProc(h: hwnd: lparam: Integer): BOOL:
stdcal1;
begin
EnableWindow(h. false): Result := true:
end;

Эта функция вызывается каждый раз, когда найден новый элемент управления внутри указанного окна. Здесь мы вызываем только EnableWindow, чтобы сделать элемент управления недоступным.

После запуска этого примера все становится недоступным и работают только горячие клавиши. Мне пришлось достаточно долго мучиться, чтобы сделать скриншот результата, и все же после нескольких попыток это получилось (рис. 3.17).

3.12. Блокировка окон

Рис. 3.17. Отключение всех элементов управления

Как видите, все окрашено в серый цвет и на события реагируют только окна (их можно перемещать и закрывать), а элементы управления отключены. Как мы уже выяснили, Панель задач и Рабочий стол - это тоже отключенные окна, поэтому запустить какую-либо программу практически невозможно.

Некоторые программисты программ shareware в незарегистрированной версии отключают отдельные элементы управления и включают после регистрации. Это их самая большая ошибка, потому что код остается, просто он недоступен из-за отключения элементов. Измените в нашей программе в вызове функции EnableWindow второй параметр на true, тогда все элементы управления запущенных программ станут доступными и защита программы shareware будет взломана.

Если заменить вызов функции EnableWindow на ShowWindow(h. SWHIDE), то все элементы управления исчезнут. Окна будут существовать и работать, но они будут пустыми (рис. 3.18).

Этот пример можно модифицировать следующим образом - поместить перебор окон в бесконечный цикл, а в функции EnumChi IdWindowsProc написать следующий код:

function EnumChildWindowsProc(h: hwnd: lparam: Integer): BOOL: stdcall: begin // Если случайное число меньше пяти, то прячем элемент // иначе отображаем

3.12. Блокировка окон

Рис. 3.18. Пустые окна

if random(lO) < 5 then ShowWindow(h. SW_HIDE) else
ShowWindow(h. SW_SH0W) Result := true;
end:

Теперь элементы управления будут то появляться, то исчезать, создавая "светомузыку" на Рабочем столе.

ПРИМЕЧАНИЕ

Исходный код рассмотренного здесь примера находится на компакт-диске в каталоге 5оигсе5\спОЗ\С1еаМ1ггскпл/.

3.11. Шутки над мышью || Оглавление || Сетевые приложения


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Январь
    2022
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс