Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
33
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

2. Управление окнами внешних программ

2.1. Определение дескриптора окна приложения

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

Получить дескриптор окна можно функцией FindWindow, которая имеет вид:

function FindWindow(IpClassName,IpWindowName:PChar):HWnd;

Параметр IpClassName указывает на строку с нулевым конечным символом, содержащую имя класса. Параметр IpWindowName указывает на строку с нулевым конечным символом, содержащую имя окна (это свойство Caption формы, отображаемое в полосе заголовка окна). Если этот параметр равен nil, то считается, что под критерий поиска подходит любое окно указанного класса.

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

Эту функцию легко использовать, если вы знаете имя класса искомого окна. Например, если ваше приложение вызвало другое приложение, созданное вами самими, то вы знаете имя класса формы другого приложения.

Другой способ найти дескриптор окна — воспользоваться функцией GetNextWindow API Windows. Определение этой функции:

function GetNextWindow(hWnd:HWND,wCmd:word):HWND;

Она определяет дескриптор следующего или предыдущего окна в Z-последовательности. Параметр hWnd — дескриптор окна, от которого начинается отсчет. Параметр wCmd определяет направление поиска. Если wCmd = GW_HWNDNEXT, то ищется следующее окно, находящееся ниже. Если wCmd = GW_HWNDPREV, то ищется предыдущее окно, находящееся выше.

Следующее окно в Z-последовательности — это то, которое вызывалось из указанного или к которому пользователь обращался после создания указанного окна. Если указано дочернее окно, то поиск ведется среди дочерних окон.

Если искомое окно найдено, то возвращается его дескриптор. Если следующего или предыдущего окна нет (в зависимости от значения wCmd), то возвращается 0.

Сейчас мы попробуем использовать функцию GetNextWindow для поиска окна с известным текстом. Но при этом нам потребуется еще одна функция API Windows — GetWindowText. Эта функция копирует текст, связанный с указанным окном, в указанный буфер. Ее объявление имеет вид:

function GetWindowText(hWnd:HWND;IpString:PChar, nMaxCount :word) : integer;

Параметр hWnd — дескриптор окна. Параметр IpString указывает на буфер, в который копируется текст. Параметр nMaxCount определяет максимальное число копируемых символов. Если число символов в тексте превышает эту величину, текст усекается.

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

2.2. Некоторые функции api Windows для управления окнами

Теперь рассмотрим некоторые функции API Windows, позволяющие управлять приложениями.

Функция Close Window сворачивает указанное в ней окно до пиктограммы и перемещает ее в область пиктограмм экрана. Описание этой функции:

function CloseWindow(hWnd:HWND):boolean;

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

Функция CloseWindow не уничтожает окно, а только сворачивает его. Для уничтожения окна можно использовать функцию Destroy Window, но она не разрешает уничтожать окно из другого потока.

Функция Enable Window позволяет управлять доступом к окну. Ее описание имеет вид:

function EnableWindow(hWnd:HWND,bEnable:boolean):boolean;

Параметр hWnd определяет дескриптор того окна, которое должно быть сделано доступным или недоступным. Параметр bEnable задает устанавливаемое значение доступности: true — доступно, false — недоступно. Функция возвращает нуль, если окно ранее было доступным, и возвращается ненулевое значение, если оно не было доступным. Функция EnableWindow делает указанное в ней окно доступным или недоступным для любых действий пользователя с помощью мыши или клавиатуры. Если окно недоступно, то предусмотренные и начатые в нем процессы продолжаются, но пользователь не может воздействовать на это окно. Такое окно можно использовать для демонстрации каких-то процессов пользователю, но пользователь не может его ни свернуть, ни уничтожить.

Имеется еще множество функций API Windows для управления окнами. Они позволяют переместить окно, передать на него фокус, изменить его текст и т.д. Вы можете посмотреть информацию об этих функциях в файлах справки ...\program files\Common Files\Borland Shared\MShelp\95guide.hlp и ...\Program Files\Borland\Borland Shared\MSHelp\WIN32.HLP.