007wan |
Отправлено: 06 Сентября, 2019 - 14:55:16
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)
Не нужно 3 раза вызывать функцию WindowFromPoint. Присвоить результат переменной и сравнивать.
Цитата: int handle=WindowFromPoint(Mouse_x, Mouse_y);
while(handle == Object_Checkbox[i] || handle == ...)
Цитата: while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}
И зачем нужен while, если он постоянно прерывается через break без всяких условий?
Цитата: Load_Settings();
Можно добавить в таймер 0, только дописать условие через gettime чтобы срабатывало каждые 500 мсек. Так как лучше, я без понятия. Капец, удмал сегодня вспомню что имелось ввиду, а так и храню теперь и не пойму. Пишем ошибка. |
|
|
007wan |
Отправлено: 13 Сентября, 2019 - 15:37:37
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет:
Не нужно 3 раза вызывать функцию WindowFromPoint. Присвоить результат переменной и сравнивать. Не совсем понял ну при свою я и что, а Куда другой for девать?
CODE:CREATE_TIMER(3, 10)
{
getmouse(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}
}
}
(Добавление)
007wan пишет: И зачем нужен while, если он постоянно прерывается через break без всяких условий? Без Break у меня раньше сильно лагало, что жуть какая, а сейчас он выходит из цикла на передышку и даже быстрее скрипт стал работать из-за такой мелочи.
(Добавление)
Не работает.
CODE: for (int i=0; i<sizearray(Object_Checkbox); i++)
{
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
while(Handle_Controls == Object_Checkbox[i])
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
}
}
Какой смысл получать хэндл, если он может не найти нужный наведенный контрол и ему придется снова цикл делать?
(Добавление)
Так лучше и правильнее?Код (Отобразить)CODE:getmouse(Mouse_x, Mouse_y);
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
while(Handle_Controls == Object_Button1)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}
}
(Добавление)
Точнее.
ДО (Отобразить)CODE:getmouse(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}
} ПОСЛЕ (Отобразить)CODE:getmouse(Mouse_x, Mouse_y);
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
while(Handle_Controls == Object_Checkbox[i] || Handle_Controls == Object_Button1 || Handle_Controls == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}
} |
|
|
Zireael |
Отправлено: 14 Сентября, 2019 - 01:44:57
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Так лучше и правильнее?
Неправильно. Подумайте над этим:
CODE:int a=0;
while(a<100)
{
a++;
}
messagebox(a);
CODE:int a=0;
while(a<100)
{
a++;
break; // сразу выход, тогда зачем нужен цикл?
}
messagebox(a); |
|
|
007wan |
Отправлено: 14 Сентября, 2019 - 09:11:06
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Так лучше и правильнее?
Неправильно. Подумайте над этим:
CODE:int a=0;
while(a<100)
{
a++;
}
messagebox(a);
CODE:int a=0;
while(a<100)
{
a++;
break; // сразу выход, тогда зачем нужен цикл?
}
messagebox(a); Не хочу писать, но ты не прав на счет break; Я же код запустил и вижу, что ты не прав.
Этот код (Отобразить)CODE:CREATE_TIMER(3, 10)
{
getmouse(Mouse_x, Mouse_y);
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
while(Handle_Controls == Object_Checkbox[i] || Handle_Controls == Object_Button1 || Handle_Controls == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;//если без него, то при наведении на контрол какой-то сменится рука и больше не вернется, даже при не наведении
}
}
} Код выше. Без break курсор сменится на одном контроле и больше не сможет возвратится в исходное состояние, а break прерывает цикл и он возвращает обычный курсор, когда не наведен на контрол. Другими словами: без break(Навели на контрол - поменялась рука, убрали наведение с контрола - рука не меняется на стандартную, а с break когда убрали мышь с контрола - то всё норм, рука вернулась обычная
(Добавление)
Может я чего-то не понимаю, не так создал код, так как правильнее? for и while не мешаются.
(Добавление)
Ты понимаешь, что суть SetCursor(Object_Cursor1); менять курсор, а при перемещении мыши - возвращать стандартный(стрелку). А while и for удерживают его, когда наведешь на кнопку или наведешь и переместишь мышь в зоне кнопки, а потом если не в зоне кнопки, то АВТОМАТИЧЕСКИ возвращает стрелку курсора, до тех пор пока не дана команда SetCursor(Object_Cursor1);, а если она дана, то меняет курсор и тд
(Добавление)
Если есть лучше код, то я слушаю. Потому что я знаю как это работает и считаю, что break тут нужен, есть лучше идея? Давай проверим...(Отредактировано автором: 14 Сентября, 2019 - 09:20:56) |
|
|
007wan |
Отправлено: 14 Сентября, 2019 - 10:51:44
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Заменить while на if, убрать getmouse, тот что в цикле.
ПОСЛЕ2 (Отобразить)CODE:CREATE_TIMER(3, 10)
{
getmouse(Mouse_x, Mouse_y);
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
if(Handle_Controls == Object_Checkbox[i] || Handle_Controls == Object_Button1 || Handle_Controls == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
}
}
} А реально теперь break; не нужен. Но не могу пока точно сказать как это скажется, когда запустится другой таймер и бот в целом, когда будет искать изображения итд, до этого с while, break сильно лагало, а сейчас не знаю. Скоро проверю, когда сделаю сокращение кода и упрощения.
(Добавление)
Я кстати, убрал таймер с загрузкой настроек в реальном времени, лучше тогда придется остановить бот, запустить и он загрузит их снова 1 раз или же по таймеру, который будет запущен для поиска изображений |
|
|
|