Показаны сообщения с ярлыком showwindow. Показать все сообщения
Показаны сообщения с ярлыком showwindow. Показать все сообщения

суббота, 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". Также можно скрыть кнопку пуск, или системные часы...