Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Описание: Доработка получения указателя win и обновление экрана..
Kibor
Отправлено: 22 Ноября, 2013 - 18:51:42
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




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 весь экран.
 
 Top
Dantes3000
Отправлено: 04 Июля, 2018 - 22:10:36
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1464
Дата рег-ции: Июнь 2016  
Репутация: 58




Можно как-то получить указатель на программу не по координатам и не по названию?

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

Или же подскажите как можно реализовать идею:
нужно чтобы в процессе работы скрипта он перезапустил игру. Указатель теряется, понятное дело, но проблема в том, что окон игры с одинаковым названием может быть много.
(Добавление)
Может как-то переименовать все остальные окна, чтобы только что открытое было уникальным?
 
 Top
Kibor
Отправлено: 04 Июля, 2018 - 23:18:37
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Игра после запуска активная?
Ну так
win w=getwindow();
Получает указатель активного главного окна.
 
 Top
Dantes3000
Отправлено: 05 Июля, 2018 - 00:15:10
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1464
Дата рег-ции: Июнь 2016  
Репутация: 58




 Kibor пишет:
Игра после запуска активная?

Не активна почему-то. Это про ваpcпир я как обычно
(Добавление)
Точнее активна, но иногда не всегда
 
 Top
Zireael
Отправлено: 05 Июля, 2018 - 03:23:50
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4395
Дата рег-ции: Нояб. 2017  
Репутация: 580




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, это и будет перезапущенное окно.
 
 Top
Dantes3000
Отправлено: 05 Июля, 2018 - 15:03:46
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1464
Дата рег-ции: Июнь 2016  
Репутация: 58




 Zireael пишет:
Или второй вариант. Перед закрытием игры ищем через FindWindowEx хендлы всех окон с указанным классом, записываем в массив1, после перезапуска игры снова ищем все хендлы с тем же классом, пишем в массив2, ищем какого хендла нет в массиве1, это и будет перезапущенное окно.

Геморно, конечно, но ладно. Буду думать, спасибо.
 
 Top
Cocacaca
Отправлено: 28 Августа, 2018 - 16:07:52
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2017  
Репутация: 0




А как проверить допустим, окно нужное в данный момент открыто или нет?
 
 Top
Zireael
Отправлено: 29 Августа, 2018 - 02:13:23
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4395
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
А как проверить допустим, окно нужное в данный момент открыто или нет?

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

Проверить активное окно блокнот или нет (Отобразить)
 
 Top
Cocacaca
Отправлено: 01 Сентября, 2018 - 20:00:43
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 20
Дата рег-ции: Нояб. 2017  
Репутация: 0




Бывает такое, что запуск приложения происходит через ф-цию start() и почему-то он отказывается его видеть
 
 Top
Kibor
Отправлено: 01 Сентября, 2018 - 20:11:29
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Что значит отказывается
может программа еще не запустилась
алгоритм какой определяет ?
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by