Zireael |
Отправлено: 28 Октября, 2022 - 11:55:49
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Если сделать 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("Блокнот найден"); |
|
|
konctantin777 |
Отправлено: 28 Октября, 2022 - 15:05:22
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
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 нельзя записывать одинаковое значение ?? |
|
|
Zireael |
Отправлено: 29 Октября, 2022 - 01:58:51
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
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("Блокнот найден");
}
Если закрыть блокнот, то будет снова ожидать. |
|
|
konctantin777 |
Отправлено: 29 Октября, 2022 - 15:44:06
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
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, что определяет наличие открытого процесса |
|
|
Zireael |
Отправлено: 29 Октября, 2022 - 17:23:39
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: но почему мой пример не работает ?
Какой именно?
Цитата: Если окно постоянно есть, то есть ли какая разница, какой командой обновлять данные ?
Нет смысла каждый раз искать окно используя 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("Блокнот закрыт");
} |
|
|
konctantin777 |
Отправлено: 29 Октября, 2022 - 18:18:32
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
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; |
|
|
konctantin777 |
Отправлено: 29 Октября, 2022 - 20:00:24
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
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; |
|
|
|