Управление окнами приложений

Страницы работы

Содержание работы

1.1.      Управление окнами  приложений

В этом разделе данной лабораторной работы мы рассмотрим выполнение операций с окнами уже запущенных приложений. Запуск внешнего приложения рассмотрен в лабораторной работе, посвященной процессам и потокам. 

Определение дескриптора окна

Чтобы управлять окном приложения сначала необходимо определить его дескриптор – уникальный 32-разрядный номер объекта.

Для окон верхнего уровня это можно выполнить функцией FindWindow.

Function FindWindow(lpClassName, lpWindowName : PChar) :  hWnd;

Здесь:

lpClassName – имя класса окна;

lpWindowName – имя окна, отображаемое в строке заголовка окна;

hWnd - тип дескриптора окна (определен в модуле Windows как тип  LongWord).

Можно определить любой из этих параметров, равным nil, что означает, что под критерий поиска подходит любое окно или любой класс.

Наиболее просто эту функцию использовать для определения дескриптора окна, которое создает ваше же приложение, так как в этом случае вы точно знаете и имя класса и имя окна:

Пример:

var       DES: hWnd

DES :=  FindWindow('TForm2','Отчет № 1');

Задача усложняется, если надо управлять окном внешнего приложения. В этом случае имя класса неизвестно (в этом случае используют значение nil). Самый любимый пример в литературе, - управление калькулятором Windows, мы также его приведем:


Пример:

var       DES: hWnd

DES :=  FindWindow(nil,'Калькулятор');

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

·  Запустите интересующее вас приложение (остальные приложения пока лучше закрыть, чтобы вам не мешала дополнительная информация);

·  запустите WinSitght32   (файл …\Program Files\Delphi\Bin\ws32.exe или Пуск | Программы | Boland Delphi 6 | WinSight32);

·  Выполните Spy | Find Window  ;

·  в выведенном списке, ориентируясь на имя запускающего файла и заголовок окна (последний элемент строки), найдите строку интересующего вас приложения.

А более надежный способ определения дескриптора окна калькулятора будет выглядеть следующим образом:

Пример:

var       DES: hWnd

DES :=  FindWindow('SciCalc','Калькулятор');

Сворачивание окна приложения

Для сворачивания окна приложения до пиктограммы  используется функция Win32 API   Close Window:

Function CloseWindow (hWnd :  hWnd) : boolean;

Здесь:

hWnd- дескриптор сворачиваемого окна, при неуспешном завершении выполнения функции возвращаемое значение дескриптора равно нулю.

Пример:

var       DES: hWnd

DES :=  FindWindow('SciCalc','Калькулятор');

CloseWindow (Des);

Здесь мы сначала определяем дескриптор окна функцией Find Window, а затем сворачиваем его функцией CloseWindow.

Закрытие окна приложения

Для закрытия окна с его разрушением можно использовать функцию DestroyWindow, но только в том случае, если и разрушаемое окно и процедура, выполняющая его разрушение, принадлежат одному потоку (в однопоточном случае – одному приложению, более подробно потоки будут рассмотрены в последующих лабораторных работах).

Чтобы аккуратно завершить внешнее приложение, дав ему произвести необходимую очистку, мы должны послать сообщение WM_CLOSE всем видимым окнам верхнего уровня, принадлежащим приложению. Посылка сообщения WM_CLOSE эквивалентна команде Закрыть системного меню окна. Например, при закрытии таким способом окна редактора MS Word, если документ редактировался и не был сохранен, перед закрытием MS Word предложит сохранить внесенные в документ изменения.

Похожие материалы

Информация о работе