суббота, 20 сентября 2008 г.

WinAPI: Showwindow и Findwindow

Showwindow и Findwindow

На данной странице речь пойдет о двух API функциях, с помощью которых осуществляется показ и скрытие различных окон, программ, элементов Windows с глаз пользователя. Рассмотрим каждую из функций подробнее...

function ShowWindow(Wnd: HWnd; CmdShow: Integer); 

Первый параметр функции указывает окно, с которым будет происходить та или иная операция, а второй указывает операцию, которая требуется. Нам нужны только две основные операции, это показ окна - sw_show и его скрытие - sw_hide. Список остальных операций с окном можно узнать из Microsoft Win32 Programmer's Reference, идущей в комплекте справки с Delphi.
Если мы хотим скрыть нашу программу, то пишем:

procedure TForm1.Button1Click(Sender: TObject);
begin
showwindow(application.MainForm.Handle,sw_hide);
end;


Чтобы скрыть кнопку программы из трэя и по Alt-Tab, пишем это...

procedure TForm1.Button1Click(Sender: TObject);
begin
showwindow(application.Handle,sw_hide);
end;


Ну и чтоб это все потом, естественно показать, на месте sw_hide пишем sw_show.
Рассмотрим вторую функцию:

function FindWindow(ClassName, WindowName: PChar): HWnd;

С помощью этой функции мы находим в системе окно по заданным нами параметрам. Возвратным значением данной функции будет handle искомого нами окна, если такое существует и 0, если не существует. Первый её параметр указывает на класс объекта, по которому во всей системе можно найти сам объект, а во втором параметре указывается текст в заголовке этого объекта. Например у нас есть открытая папка под названием "Музыка". Значит в заголовке открытого окна есть надпись "Музыка". Нам необходимо скрыть данное окно с рабочего стола. Для этого пишем: 

procedure TForm1.Button1Click(Sender: TObject);
begin
showwindow(findwindow(nil,'Музыка'),sw_show);
end;


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

procedure TForm1.Button1Click(Sender: TObject);
begin
showwindow(findwindow('shell_tray_wnd',nil),sw_show);
end;


Здесь мы делаем поиск уже не по заголовку объекта, а по его классу. Константа "Shell_traywnd" указывает как раз на наш системный трэй. Если хорошо поискать такие константы, то можно например скрыть значки рабочего стола, написав константу "progman". Также можно скрыть кнопку пуск, или системные часы...

Комментариев нет: