В продолжение темы “Шутки за 5 минут” я расскажу как можно спрятать или закрыть чужое окно, а так же на примере покажу как можно спрятать волшебную кнопку “Пуск”, без которой некоторым кажется невозможно выключить компьютер :) .
Для начала я расскажу про чужие окна. Что бы работать в Delphi с чужим окном необходимо сначала найти его дескриптор. Делается это при помощи замечательной функции FindWindow. Эта функция имеет два параметра:
lpClassName- указатель на имя класса
lpWindowName- указатель на имя окна.
Не буду забивать вам голову классами с т.д. В общем покажу все на примере.
Допустим хотим мы найти и закрыть окно “Мой компьютер”.
Создаем новую форму и ставим на ней одну кнопку. В обработчике событий нажатия на эту кнопку пишем следующий код:
Var
h:Hwnd;
Begin
h:=FindWindow(0,’Мой компьютер’);
SendMessage(h,WM_SYSCOMMAND,SC_CLOSE,0);
end;
Теперь при нажатии на кнопку будет закрываться окно “Мой компьютер” (если оно открыто конечно). Как вы видите в строке FindWindow(0,’Мой компьютер’); мы не знаем имя класса, поэтому ставим 0. Но мы знаем имя окна, в нашем случае это “Мой компьютер”. Имя окна-это все то, что написано сверху окошка. Мы могли написать здесь все что угодно. В строке SendMessage(h,WM_SYSCOMMAND,SC_CLOSE,0); мы просто отправляем этому окну сообщение о том, что ему необходимо закрыться. Точно так же мы можем его свернуть или развернуть командами SC_MINIMIZE и SC_MAXIMIZE соответственно.
Не знаю почему, но мне сразу в голову лезет гадкая прогруммулина. Берем таймер, в обработчик события ставим весь этот код, ну и интервал срабытывания таймера делаем поменьше, и вуаля, наш дружок подопытный не может открыть “Мой компьютер”. Конечно он запускается, но пользователь этого не видит, так как мы быстро его закрываем. После такого наш подопытный начнет грешить на свою windows и прокленать ни в чем не повинного Была Гейтса, а вы будете тихо хихать всторонке. Конечно такую программу нужно будет спрятать от глаз юзера, а если хотите поиздеваться подольше, то и в автозапуск прописать. Как это сделать я рассказал в своей предыдущей статье. Тоже самое можно сделать с любой другой внешней программой, достаточно лишь изменить строку FindWindow(0,’Мой компьютер’);
Теперь я расскажу как можно спрятать кнопочку “Пуск” так горячо любимую всеми домохозяйками. Для начала нам нужно найти окно панели задач. Делается это так:
h:=FindWindow(‘Shell_TrayWnd’,nil);
Ну вот теперь мы можем сделать с этим окошком все, что угодно, например скрыть его от пользователя:
ShowWindow(h,SW_HIDE);
Панель задач пропадет и чтобы ее вернуть нам нужно изменить последний параметр функции ShowWindow на SW_SHOW:
ShowWindow(h,SW_SHOW);
Полный код программы, скрывающей панель задач выглядит так:
var
h:hwnd;
begin
h:=FindWindow(‘Shell_TrayWnd’,nil);
ShowWindow(h,SW_HIDE);
end;
Засовываем этот код в какой-нибудь обработчик событий, например в TForm1.FormCreate и пишем в конце Form1.Close; После этого при запуске программы панель задач пропадет, а программа закроется.
Ну а теперь Вернемся к нашим “баранам”, найдем наконец-то кнопку “пуск”. Для этого нужно сначала найти панель задач, как мы это делали выше, а потом на панели задач найти пуск. Полный код всего этого выглядит так:
var
h:hwnd;
begin
h:=FindWindow(‘Shell_TrayWnd’,nil);
h:=FindWindowEx(h,HWND(0),’Button’,nil);
ShowWindow(h,SW_HIDE);
end;
Если вы хотите сделать кнопку “Пуск” неактивной (ее будет видно, но при нажатии на нее происходить ничего не будет), то строку ShowWindow(h,SW_HIDE); нужно заменить на EnableWindow(h,false);. Чтобы обратно сделать кнопку активной нужно параметр false поменять на true.
Ну вот вроде и все. Такие шутки очень легки в реализации, но в то же время очень сильно шокируют рядового пользователя. Если вам есть над кем пошутить, то попробуйте и не будете разочарованы.