Процедуры и функции WinAPI
В этом разделе описаны процедуры и функции, работающие с окнами Windows. Все окна иерархичны.
На самом верху расположено окно с рабочим столом, носящее название "Program Manager". Внутри него открываются все остальные окна.
Каждое окно состоит из отдельных элементов (кнопки, поля, ..). Некоторые элементы-контейнеры включают в себя группы других элементов.
Следовательно, действие совершенное с контейнером, в некотором роде затронет все дочерние элементы.
Типичным примером является окно. Почти все окна можно свернуть. И вместе с окном свернется меню, поле ввода, кнопки. У каждого элемента есть свой
уникальный идентификатор - HWND (Handle of Window, "Ручка окна"), представленный числом. За эту ручку можно взять. То есть, зная hwnd, можно обратиться
к конкретной части "пирамиды" окон, будь то конечная кнопка или окно программы в целом.
Следуя традициям MS, я так же не буду разделять понятия окна привычного нам и окна по мнению Windows. Просто не пугайтесь если я где-то обзову кнопку окном, а окно - элементом.
Содержание
HGET
СинтаксисHGET (x, y) - числовая функция; возвращает HWND для элемента по заданным координатам
x,y - координаты пикселя, принадлежащего элементу
$h = hget(44,1010) print( hgettext($h) )
Функция возвращает уникальный номер элемента окна Windows
HSET
СинтаксисHSET (hwnd, state) - устанавливает новый рабочий элемент для оконного режима
hwnd - hwnd элемента
state - состояние оконного режима (1 - вкл. 0 - выкл.)
// получение hwnd элемента в заданных координатах $h = hget(44,1010) // включение оконного режима, "нацеленного" на этот элемент hset($h, 1)
Если вы хотите просто сменить рабочий элемент - нет необходимости выключать оконный режим флагом 0. Просто задаете новый первым параметром.
HGETTEXT
СинтаксисHGETTEXT (hwnd) - текстовая функция; возвращает текст на элементах управления в окнах Windows
hwnd - hwnd элемента
// Пример 1 $h = hget(44,1010) print( hgettext($h) ) // Пример 2 (через строковую переменную) $h = hget(44,1010) $text = hgettext($h) print( $text )
Функция возвращает надписи на кнопках, в текстовых полях и т.п. только для элементов семейства Windows
Могут возникнуть ошибки в случае слишком большого текста
HSETTEXT
СинтаксисHSETTEXT (hwnd) - устанавливает текст на элементах управления в окнах Windows
hwnd - hwnd элемента
$h = hget(44,1010) hsettext($h, "my text")
Функция устанавливает надписи на кнопках, в текстовых полях и т.п. только для элементов семейства Windows
Установленный текст само собой сменится, как только программа, управляющая элементом, его (текст) обновит
WNDFIND
СинтаксисWNDFIND ("title", [begin]) - числовая функция; возвращает HWND окна с заданным заголовком
title - заголовок окна либо его часть
begin - необязательный параметр; флаг сообщает о том что строка title может находиться ТОЛЬКО в начале заголовка
// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и поместит его в левый верхний угол (с отступом 10 пикселей)
wndpos( wndfind("Блокнот"), 10, 10)
// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и переименует его в "Калькулятор"
hsettext( wndfind("Блокнот"), "Калькулятор")
Чем полнее будет указан заголовок, тем меньше шанс что функция "схватит" не то окно. Если функция не найдет окна, удовлетворяющего условиям, она вернет 0.
Данная функция не подходит для поиска отдельных элементов окон (кнопки, поля, надписи)
WNDPOS
СинтаксисWNDPOS (hwnd, x, y) - помещает окно на экране в указанные координаты
hwnd - HWND окна
x,y - экранные координаты
// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и поместит его в левый верхний угол 10:10
wndpos( wndfind("Блокнот"), 10, 10)
WNDSIZE
СинтаксисWNDSIZE (hwnd, w, h) - задает размер окна
hwnd - HWND окна
w,h - ширина, высота окна
// скрипт найдет окно с заголовком, содержащим "Блокнот"
// и изменит его размер на квадрат 300 на 300
wndsize( wndfind("Блокнот"), 300, 300)
Стоит заметить, что уменьшить до пикселя окно не получится, так как будут "мешаться" иконки и пара букв из заголовка
WNDGETINFO
СинтаксисWNDGETINFO (hwnd, $var1, $var2, $var3, $var4) - получает информацию об окне
Процедура записывает в указанные переменные позицию и размеры окна
hwnd - HWND окна
$var1 - X координата
$var2 - Y координата
$var3 - ширина
$var4 - высота
см. WNDSETINFO
WNDSETINFO
СинтаксисWNDSETINFO (hwnd, $var1, $var2, $var3, $var4) - обновляет информацию об окне
hwnd - HWND окна
$var1 - X координата
$var2 - Y координата
$var3 - ширина
$var4 - высота
// Забавляемся с калькулятором
$hwnd = wndfind("Калькулятор")
// получаем информацию
wndgetinfo($hwnd, $var1, $var2, $var3, $var4)
// перезаписываем размер окна
$var3 = 100
$var4 = 100
// обновляем информацию
wndsetinfo($hwnd, $var1, $var2, $var3, $var4)
WNDSTATE
СинтаксисWNDSTATE (hwnd, state) - сворачивает (разворачивает) окно
hwnd - HWND окна
state - состояние {0 - свернуто, 1 - развернуто}
// скрипт найдет окно с заголовком, содержащим "Блокнот", и свернет его
wndstate( wndfind("Блокнот"), 0)
wait(1)
// ... а потом развернет
wndstate( wndfind("Блокнот"), 1)
wait(1)
WNDBUMP
СинтаксисWNDBUMP (hwnd) - помещает окно на передний план
hwnd - HWND окна
SENDMESSAGE, POSTMESSAGE
СинтаксисSENDMESSAGE / POSTMESSAGE (hwnd, message, wParam, lParam) - посылает окну системное сообщение
hwnd - HWND окна
message - сообщение окну (*)
wParam, lParam - дополнительные параметры
Процедуры являются фактически обертками для одноименных WinAPI функций. Подробности вы можете найти в MSDN или на многочисленных форумах.
(*) Поскольку у нас нет всех констант "WM_", то параметр message необходимо задавать десятичным числом.
Если вы ничего не поняли - вам это не надо :D