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

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

 Страниц (1): [1]   

> Без описания
Adomb
Отправлено: 27 Июля, 2015 - 14:37:49
Post Id



Пользователь
Мастер


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




А можно как-то узнать активно окно или нет?
Указатель на окно получен, переменная присвоена, теперь знать состояние окна, если активно - одно действие, если нет - другое.
Прошу прощения, если уже где-то есть ответ - не нашёл/плохо искал. )
 
 Top
Kibor
Отправлено: 27 Июля, 2015 - 14:48:42
Post Id



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


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




win w=getwindow();//Получает указатель активного главного окна.

теперь сравнивая параметры.. имя, размер.. что надо можно узнать активное окно или нет..

CODE:
win w;

e: w=getwindow();
if (w.name=="название окна которое отследить") messagebox ("именно эт окно активно");
sleep(10);
goto e;
 
 Top
Adomb
Отправлено: 27 Июля, 2015 - 15:03:49
Post Id



Пользователь
Мастер


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




Наверно подробней надо, потому что активно или нет мало. Чтобы правильно рассчитывались координаты при изменении размера окна в процессе работы срипта, нужно знать наведён курсор на окно, если наведён, получитьт координаты мыши, которые передаются getwindow и переменная получает новый размер окна. Если, соответственно, курсор не на нужном окне или оно не активно, то операция пропускается и скрипт выполняется с прежними координатами.

CODE:

win main=getwindow(0, 231, 158);
win as=getwindow(1, 231, 158);
activate(main);
int mx, my, mx1, my1, getmx, getmy;

loop: //здесь начало действий

//вот этот блок выполнялся бы только если курсор на as
getmouse(getmx, getmy);
win as=getwindow(1, getmx, getmy);
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна если окну изменили размер
my=my1/2; //

(Отредактировано автором: 27 Июля, 2015 - 15:05:00)

 
 Top
Kibor
Отправлено: 27 Июля, 2015 - 15:14:24
Post Id



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


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




 Adomb пишет:
win main=getwindow(0, 231, 158);
win as=getwindow(1, 231, 158);
activate(main);
int mx, my, mx1, my1, getmx, getmy;

loop: //здесь начало действий

//вот этот блок выполнялся бы только если курсор на as
getmouse(getmx, getmy);
win as=getwindow(1, getmx, getmy);
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна если окну изменили размер
my=my1/2; //


ошибка повторное объявление..
 
 Top
Adomb
Отправлено: 27 Июля, 2015 - 15:26:23
Post Id



Пользователь
Мастер


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




Дык as объявляется до loop: , а после скрипт зацикливается и вначале цикла стоит этот блок, который каждый раз получает новый размер окна. Хоть там тоже переменная as - cкрипт всё равно работает, отправляет клики куда задумано, по новым координатам, если меняешь размер окна, только, соответственно, пока мышь на окне - отведёшь и всё. Как проверить что мышь на as, перед выполнением этого блока? ))

(Отредактировано автором: 27 Июля, 2015 - 15:27:34)

 
 Top
Kibor
Отправлено: 27 Июля, 2015 - 15:39:19
Post Id



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


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




 Adomb пишет:
Хоть там тоже переменная as - cкрипт всё равно работает
до поры до времени..,..

CODE:
string name="окно";
win w;
int x, y;
e:
getmouse(x, y);
w=getwindow(0, x, y);
if (w.name==name) messagebox ("мышь над окном");//Сравнивать.............
sleep(10);
goto e;
 
 Top
Adomb
Отправлено: 27 Июля, 2015 - 15:44:29
Post Id



Пользователь
Мастер


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




Просто, когда запускается скрипт - там будет по любому инициализация as по координатам, которые жёстко указаны
CODE:

win main=getwindow(0, 231, 158);
win as=getwindow(1, 231, 158);
activate(main);
int mx, my, mx1, my1, getmx, getmy;

А дальше только цикл действий, которые происходят при выполнении определённых условий. И вот в теле цикла loop: если курсор опять появился на окне, срабатывает блок определения нового размера окна и as переназначается.
CODE:

loop: //здесь начало действий

//вот этот блок выполнялся бы только если курсор на as
getmouse(getmx, getmy);
win as=getwindow(1, getmx, getmy);
mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна если окну изменили размер
my=my1/2; //
...
...
goto loop;

Наверно мудрёно пытаюсь делать. ))

upd.
Написал ещё до вашего ответа. Щас, осмыслю..
(Добавление)
Ну прямо сказка какая-то.. )
CODE:

win main=getwindow(0, 231, 158);
activate(main);
string name=main.name;
win w;
int mx, my, mx1, my1, getmx, getmy;

loop:
getmouse(getmx, getmy);
w=getwindow(0, getmx, getmy);
if (w.name==name){win as=getwindow(1, getmx, getmy);}

mx1=as.widthclient;
my1=as.heightclient;
mx=mx1/2; //новые координаты центра окна, независимо от его размера
my=my1/2; //

...
...
goto loop;

Работает!!!
Спасибо.
(Добавление)
CODE:

if (w.name==name)win as=getwindow(1, getmx, getmy);

Поторопился отправить, надо так :
CODE:

if (w.name==name);
{
win as=getwindow(1, getmx, getmy);
}

Иначе - Out of memory.

(Отредактировано автором: 27 Июля, 2015 - 15:47:19)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by