Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

GetNextWindow

CuBook05

Чтобы найти дескриптор окна можно воспользоваться функцией GetNextWindow API Windows. Определение этой функции:
HWND GetNextWindow(hWnd hWnd, unsigned int wCmd);
Она определяет дескриптор следующего или предыдущего окна в Z-последовательности. Параметр hWnd - дескриптор окна, от которого начинается отсчет. Параметр wCmd определяет направление поиска. Если wCmd = GW_HWNDNEXT, то ищется следующее окно, находящееся ниже. Если wCmd = GW_HWNDPREV, то ищется предыдущее окно, находящееся выше.
 
Следующее окно в Z-последовательности - это то, которое вызывалось из указанного или к которому пользователь обращался после создания указанного окна. Если указано дочернее окно, то поиск ведется среди дочерних окон.
Если искомое окно найдено, то возвращается его дескриптор. Если следующего или предыдущего окна нет (в зависимости от значения wCmd), то возвращается 0.
 
Сейчас мы попробуем использовать функцию GetNextWindow для поиска окна с известным текстом. Но при этом нам потребуется еще одна функция API Windows - GetWindowText. Эта функция копирует текст, связанный с указанным окном, в указанный буфер. Ее объявление имеет вид:
int GetWindowText(HWND hWnd, char *lpString, int nMaxCount);
Параметр hWnd - дескриптор окна. Параметр IpString указывает на буфер, в который копируется текст. Параметр nMaxCount определяет максимальное число копируемых символов. Если число символов в тексте превышает эту величину, текст усекается.
 
Если функция выполнилась успешно, она возвращает число скопированных символов, исключая завершающий нулевой символ. Если окно не имеет полосы заголовка или текст заголовка отсутствует, или при неверном дескрипторе возвращается нуль.
 
Теперь мы можем решить задачу, поставленную нами в качестве примера: определить дескриптор окна выполняемого приложения «Калькулятор». Это можно сделать с помощью следующего кода:
HWND H = Handle;
char Pch[128];
do
{
H = GetNextWindow (H, GW__HWNDNEXT);
GetWindowText(H,Pch,128);
if(CompareText(Pch, "Калькулятор") == 0)
break;
}
while(H != NULL);
if(H != NULL)
//...свой код программы
Первый выполняемый оператор присваивает переменной H значение свойства Handle формы вашего приложения. Далее в цикле просматриваются окна, лежащие ниже в Z-последовательности, и среди них ищется окно с текстом «Калькулятор». Для этого используется функция CompareText, сравнивающая без учета регистра строку, на которую указывает Pch, со строкой «Калькулятор». Если строки совпадают, функция CompareText возвращает нуль. Пользуясь тем, что С++ позволяет оперировать с целыми значениями как с булевыми, строку оператора if можно было бы записать и в таком виде:
if( ! CompareText(Pch, "Калькулятор"))
Окно калькулятора будет найдено, если око получало фокус после запуска вашего приложения. Таким образом, если пользователь запустил «Калькулятор» из вашего приложения или даже если «Калькулятор» был запущен ранее или независимо от вашего приложения, дескриптор его окна будет найден. Если цикл завершается со значением Н = NULL, значит приложение «Калькулятор» в данный момент не открыто.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий