Kibor |
Отправлено: 22 Ноября, 2013 - 18:51:42
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
getwindow - Позволяет получить указатель на окно или контролл по указанным координатам верхнего окна.
Синтаксис:
win w=getwindow(0, X, Y);
Первый параметр - если 0 получает указатель главного окна. если 1 получает контролла который по этим координатам.
Второй третий - координата x y
win w=getwindow();
Получает указатель активного главного окна.
При получение указателя становится доступна структура win:
wind.width = ширина окна
wind.height = высота окна
wind.left = позиция по x относительно левого края экрана
wind.top = позиция по y относительно левого края экрана
wind.widthclient = ширина клиетской части окна (без системного меню и рамки)
wind.heightclient = высота клиетской части окна (без системного меню и рамки)
wind.leftclient = позиция клиетской части по x относительно левого края экрана
wind.topclient = позиция клиетской части по y относительно левого края экрана
wind.name = название окна
wind.class = название класса
Пример:
Цитата: win w;
int x, y;
int ind=1;//если 0 - на главное окно
textbkcolor (0,65535);
a: getmouse(x, y);
w=getwindow(ind, x, y);
textout(4, x+20, y+20, "Название: "+w.name+"Класс: "+w.class+" Размер X: "+format (w.widthclient)+" Размер Y: "+format (w.heightclient), 1);
sleep(100);
goto a;
Пример реализации привязки к двум одинаковым окнам
Цитата:
win w, w1;
int Xv, Yv;
if (messageboxyn("Нажмите ДА. Наведите мышь на игру в первом браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r: if (getkeystate(192)!=1){sleep(50); goto r;}
getmouse(Xv, Yv);
w=getwindow(1, Xv, Yv);
if (messageboxyn ("Нажмите ДА. Наведите мышь на игру во втором браузере и нажмите Ё. Для отмены нажмите НЕТ.")==-1)goto er;
r1: if (getkeystate(192)!=1){sleep(50); goto r1;}
getmouse(Xv, Yv);
w1=getwindow(1, Xv, Yv);
sw:;
activate(w);
sleep(2000);
activate(w1);
goto sw;
er:;
....................................................
update - обновляет экран или окно.
Синтаксис:
update(w);
update(-1);
Параметр принимаемый - указатель на окно. Если -1 весь экран. |
|
|
Zireael |
Отправлено: 05 Июля, 2018 - 03:23:50
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
FindWindow возвращает хендл последнего активного окна с указанным классом и/или именем.
Например, отройте несколько блокнотов, запустите код. В сообщении будет хендл блокнота, который запускался через start(). Если конечно не переключаться на другие блокноты до вызова FindWindow.
CODE:external(INT, "FindWindow", "FindWindowA", "user32.dll");
int handle;
start("C:\Windows\notepad.exe");
sleep(500); // время чтобы блокнот успел открыться.
handle = FindWindow("Notepad", 0);
messagebox(handle);
Или второй вариант. Перед закрытием игры ищем через FindWindowEx хендлы всех окон с указанным классом, записываем в массив1, после перезапуска игры снова ищем все хендлы с тем же классом, пишем в массив2, ищем какого хендла нет в массиве1, это и будет перезапущенное окно. |
|
|
Zireael |
Отправлено: 29 Августа, 2018 - 02:13:23
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А как проверить допустим, окно нужное в данный момент открыто или нет?
Не понятно что подразумевается под 'открыто', имеется ввиду запущено или активно.
CODE:if(window (-1, "Notepad", -1)!=0)messagebox("Блокнот найден");
else messagebox("Блокнот не найден");
Проверить активное окно блокнот или нет (Отобразить)CODE:if(window (-1, "Notepad", -1)==0)start("C:\Windows\notepad.exe"); // если блокнот не открыт запускаем его
while(window (-1, "Notepad", -1)==0)sleep(10); // ждём когда откроется
win w=window (-1, "Notepad", -1); // получаем указатель на него
enabletimer(0);
loop()
{
// тут сам скрипт
sleep(100);
}
CREATE_TIMER(0, 200)
{
if(formatwi(w)==formatwi(getwindow())) // сравниваем хендл блокнота с хендлом активного окна
{
textbkcolor(255, 65280);
textout(0, 300, 300, "Окно активно", 1); // если блокнот активен
}
else
{
textbkcolor(65280, 255);
textout(0, 300, 300, "Не активно", 1); // если нет
}
} |
|
|
|