Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » W_Kib=window и setwindowparam(W_Kib); в чём разница ?

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

1. konctantin777 - 28 Октября, 2022 - 01:07:03 - перейти к сообщению
Здравствуйте.
Если сделать W_Kib=window ("Gems"); , то обновятся данные об окне, если setwindowparam(W_Kib); , то тоже обновятся. В чём тогда между ними разница, Почему всегда просто W_Kib=window ("Gems"); не писать ?

+ окно игры в шпионе показывает window ("Gems").
CODE:
запускаю:;
log("Запускаю");

if(start("C:\Program Files (x86)\Gems\Gems.exe")==1)
{pause(1000);goto жду_нач_окно;} // запускаю игру
if(start("D:\Gems\Gems.exe")==1)
{pause(1000);goto жду_нач_окно;} // запускаю игру

pause(1000);
goto запускаю;

жду_нач_окно:;
W_Kib=window ("Gems");
n1= formatwi(W_Kib);

if(n1==0)
{log("Жду начальное окно");pause(1000);goto жду_нач_окно;}

setwindowparam(W_Kib);

log("Жду_играть_(гл. окно)");

W_Kib=window ("Gems");
setwindowparam(W_Kib);
// если находится картинка- идёт дальше, если нет- на log("Жду_играть_(гл. окно)");

Кибор закрывает и открывает игру- не находит картинку и по кругу пишет "Жду_играть_(гл. окно)". Если игра уже запущена- картинка находится и код выполняется дальше. Как правильно сделать, чтобы игра находилась после запуска ?
2. Zireael - 28 Октября, 2022 - 03:55:49 - перейти к сообщению
 Цитата:
Если сделать W_Kib=window ("Gems" ); , то обновятся данные об окне, если setwindowparam(W_Kib); , то тоже обновятся

При вызове window() будет новый поиск окна, setwindowparam() только зполнит структуру win.
 Цитата:
Как правильно сделать, чтобы игра находилась после запуска ?

CODE:
win W_Kib = window (-1, "Notepad", -1); // окно блокнота
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
3. konctantin777 - 28 Октября, 2022 - 07:05:22 - перейти к сообщению
 Zireael пишет:
При вызове window() будет новый поиск окна, setwindowparam() только зполнит структуру win.

Т.е. если окно не исчезает, то без разницы, что писать- итог один ?

CODE:
win W_Kib = window (-1, "Notepad", -1); // окно блокнота

f:;
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
goto f;


Если блокнот закрыть, то всё равно пишет, что найден. Не должен же ?
Игра при запуске открывает одно окно, потом закрывает и открывает другое и оба определяются как window ("Gems"). Может из- за этого ?
(Добавление)
CODE:
W_Kib=window("Gems"); // окно

while(W_Kib==0) // ждать когда окно появится
{
W_Kib =window("Gems");;
//textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
log("окно есть");
// тут ищет картинку и если находит идёт дальше
// если не находит идёт сюда и снова кртинку
log("Жду_играть_(гл. окно)");

W_Kib=window ("Gems");


Правильно ? Тоже не хочет. Пишет, что окно есть и потом по кругу "Жду_играть_(гл. окно)". А если запустить с запущенной игрой, то норм проходит...
(Добавление)
CODE:
win W_Kib = window (-1, "Notepad", -1); // окно блокнота

f:;
W_Kib = window ("fghfg");
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
goto f;

А если сделать так, то корректно работает при закрытии блокнота. Получается, что в win нельзя записывать одинаковое значение ??
4. Zireael - 28 Октября, 2022 - 17:58:51 - перейти к сообщению
CODE:
loop()
{
win W_Kib = window (-1, "Notepad", -1); // окно блокнота
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
}

Если закрыть блокнот, то будет снова ожидать.
5. Martin - 29 Октября, 2022 - 07:35:02 - перейти к сообщению
 Zireael пишет:
Если закрыть блокнот, то будет снова ожидать.
а как сделать чтобы скрипт выполнился один раз при открытии блокнота и ушел в ожидание когда пока я не закрою и открою блокнот снова?
6. konctantin777 - 29 Октября, 2022 - 07:44:06 - перейти к сообщению
Zireael , Ваш код да, но почему мой пример не работает ? Какая- то фича в киборе, что нельзя несколько раз заполнять переменную win одинаковыми данным ?
 konctantin777 пишет:
win W_Kib = window (-1, "Notepad", -1); // окно блокнота

f:;
W_Kib = window ("fghfg");
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
goto f;

(Добавление)
 konctantin777 пишет:
 Zireael пишет:
При вызове window() будет новый поиск окна, setwindowparam() только зполнит структуру win.

Т.е. если окно не исчезает, то без разницы, что писать- итог один ?


Если окно постоянно есть, то есть ли какая разница, какой командой обновлять данные ?
(Добавление)
 Martin пишет:
Zireael пишет:
Если закрыть блокнот, то будет снова ожидать.
а как сделать чтобы скрипт выполнился один раз при открытии блокнота и ушел в ожидание когда пока я не закрою и открою блокнот снова?


while(W_Kib==1) // окно есть- делаем паузу на это время
или где то тут на форуме есть функция от Zireael, что определяет наличие открытого процесса
7. Zireael - 29 Октября, 2022 - 09:23:39 - перейти к сообщению
 Цитата:
но почему мой пример не работает ?

Какой именно?
 Цитата:
Если окно постоянно есть, то есть ли какая разница, какой командой обновлять данные ?

Нет смысла каждый раз искать окно используя window(). Можно просто обновлять инфу через setwindowparam().
 Цитата:
а как сделать чтобы скрипт выполнился один раз при открытии блокнота и ушел в ожидание когда пока я не закрою и открою блокнот снова?

CODE:
#define SYNCHRONIZE 0x00100000
#define NULL 0
#define TRUE 1
#define WAIT_TIMEOUT 258
#define WAIT_FAILED -1
external(INT,"WaitForSingleObject", "WaitForSingleObject", "Kernel32.dll");
external(INT,"OpenProcess", "OpenProcess", "Kernel32.dll");
external(INT,"CloseHandle", "CloseHandle", "Kernel32.dll");

loop()
{
int PID = -1;
messagebox("Откройте блокнот");
while(PID==-1)
{
PID = findprocess("notepad.exe"); // ждать когда откроется процесс блокнота
sleep(300);
}
messagebox("Блокнот найден. Ждём когда он будет закрыт.");
// тут нужные действия

int hProcess = OpenProcess(SYNCHRONIZE, TRUE, PID);
if(hProcess == NULL)
{
messagebox("Процесс не открылся");
break;
}
int result = WaitForSingleObject(hProcess, 5000); // ожидать 5 секунд закрытия блокнота
if(result==WAIT_FAILED)
{
messagebox("WaitForSingleObject Error");
break;
}
if(result==WAIT_TIMEOUT) // блокнот не был закрыт в течении указанного времени
{
messagebox("Вышло время ожидания");
break;
}
CloseHandle(hProcess);
messagebox("Блокнот закрыт");
}
8. konctantin777 - 29 Октября, 2022 - 10:18:32 - перейти к сообщению
 Zireael пишет:
Какой именно?


CODE:
win W_Kib = window (-1, "Notepad", -1); // окно блокнота

f:;
W_Kib = window ("fghfg");
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
goto f;
9. Zireael - 29 Октября, 2022 - 10:47:56 - перейти к сообщению
Этот код работает.
10. konctantin777 - 29 Октября, 2022 - 12:00:24 - перейти к сообщению
 Zireael пишет:
Этот код работает.

Хмм... Час назад показывал,
 Zireael пишет:
Этот код работает.

Да, не тот вставил. Этот, с разными переменными работает, а почему не работает с одной ? (при закрытии блокнота, пишет что он есть ?)
CODE:
win W_Kib = window (-1, "Notepad", -1); // окно блокнота

f:;
while(W_Kib==0) // ждать когда окно появится
{
W_Kib = window (-1, "Notepad", -1);
textout(0, 0, 0, "Открыть блокнот для продолжения скрипта", 0);
sleep(300);
}
messagebox("Блокнот найден");
goto f;

Powered by ExBB FM 1.0 Final