Процедуры и функции 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