Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 3.07 Получения указателя win и обновление экрана

Страниц (4): [1] 2 3 4 »
 

1. Kibor - 22 Ноября, 2013 - 10:51:42 - перейти к сообщению
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 весь экран.
2. Dantes3000 - 04 Июля, 2018 - 14:10:36 - перейти к сообщению
Можно как-то получить указатель на программу не по координатам и не по названию?

Например, запустить ее через start и сразу получить указатель. Или указатель по месту расположения запускаемого файла, типа win w=window("C:\Program Files (x86)\TeamViewer\TeamViewer.exe" );

Или же подскажите как можно реализовать идею:
нужно чтобы в процессе работы скрипта он перезапустил игру. Указатель теряется, понятное дело, но проблема в том, что окон игры с одинаковым названием может быть много.
(Добавление)
Может как-то переименовать все остальные окна, чтобы только что открытое было уникальным?
3. Kibor - 04 Июля, 2018 - 15:18:37 - перейти к сообщению
Игра после запуска активная?
Ну так
win w=getwindow();
Получает указатель активного главного окна.
4. Dantes3000 - 04 Июля, 2018 - 16:15:10 - перейти к сообщению
 Kibor пишет:
Игра после запуска активная?

Не активна почему-то. Это про ваpcпир я как обычно
(Добавление)
Точнее активна, но иногда не всегда
5. Zireael - 04 Июля, 2018 - 19:23:50 - перейти к сообщению
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, это и будет перезапущенное окно.
6. Dantes3000 - 05 Июля, 2018 - 07:03:46 - перейти к сообщению
 Zireael пишет:
Или второй вариант. Перед закрытием игры ищем через FindWindowEx хендлы всех окон с указанным классом, записываем в массив1, после перезапуска игры снова ищем все хендлы с тем же классом, пишем в массив2, ищем какого хендла нет в массиве1, это и будет перезапущенное окно.

Геморно, конечно, но ладно. Буду думать, спасибо.
7. Cocacaca - 28 Августа, 2018 - 08:07:52 - перейти к сообщению
А как проверить допустим, окно нужное в данный момент открыто или нет?
8. Zireael - 28 Августа, 2018 - 18:13:23 - перейти к сообщению
 Цитата:
А как проверить допустим, окно нужное в данный момент открыто или нет?

Не понятно что подразумевается под 'открыто', имеется ввиду запущено или активно.
CODE:
if(window (-1, "Notepad", -1)!=0)messagebox("Блокнот найден");
else messagebox("Блокнот не найден");

Проверить активное окно блокнот или нет (Отобразить)
9. Cocacaca - 01 Сентября, 2018 - 12:00:43 - перейти к сообщению
Бывает такое, что запуск приложения происходит через ф-цию start() и почему-то он отказывается его видеть
10. Kibor - 01 Сентября, 2018 - 12:11:29 - перейти к сообщению
Что значит отказывается
может программа еще не запустилась
алгоритм какой определяет ?

Powered by ExBB FM 1.0 Final