Zireael |
Отправлено: 24 Апреля, 2020 - 16:45:07
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:external(INT, "CreateProcess", "CreateProcessA", "Kernel32.dll");
external(INT, "WaitForSingleObject", "WaitForSingleObject", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
double INFINITE = 4294967295;
ExecAndWait("C:\Windows\notepad.exe"); // запустить блокнот и ждать когда его закроют
messagebox("Окно закрыто");
function ExecAndWait(string path)
{
int STARTUPINFOA[17], PROCESS_INFORMATION[4];
initialarray(#STARTUPINFOA[0], 0);
STARTUPINFOA[0]=68;
if(CreateProcess(path, 0, 0, 0, 0, 0, 0, 0, address(#STARTUPINFOA[0]), address(#PROCESS_INFORMATION[0])))
{
WaitForSingleObject(PROCESS_INFORMATION[0], INFINITE); // ждать пока окно не будет закрыто
CloseHandle(PROCESS_INFORMATION[0]);
}
} |
|
|
Zireael |
Отправлено: 26 Апреля, 2020 - 13:57:42
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А можно как то контролировать, но чтобы 1й ехе не вис ?
Он не виснет, а ждет когда будет закрыт запущенный exe. Что и требовалось:
Цитата: Надо перед продолжение кода дождаться когда "Подз.exe" закроется. |
|
|
Zireael |
Отправлено: 26 Апреля, 2020 - 17:34:50
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:external(INT, "CreateProcess", "CreateProcessA", "Kernel32.dll");
external(INT, "EnumProcesses", "EnumProcesses", "Psapi.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
int x=0; // можно убрать, это для textout
enabletimer(0);
ExecAndWait("C:\Windows\notepad.exe"); // запустить блокнот и ждать когда его закроют
messagebox("Окно закрыто");
function ExecAndWait(string path)
{
int STARTUPINFOA[17], PROCESS_INFORMATION[4];
initialarray(#STARTUPINFOA[0], 0);
STARTUPINFOA[0]=68;
if(CreateProcess(path, 0, 0, 0, 0, 0, 0, 0, address(#STARTUPINFOA[0]), address(#PROCESS_INFORMATION[0])))
{
while(EnumProcesses_(PROCESS_INFORMATION[2])==0)sleep(100); // ждать пока запуститься приложение
while(EnumProcesses_(PROCESS_INFORMATION[2])==1)sleep(100); // ждать пока не закроется
CloseHandle(PROCESS_INFORMATION[0]);
}
}
function EnumProcesses_(int process)
{
int idProcess[9999], cbNeeded;
EnumProcesses(address(#idProcess[0]), sizearray(idProcess)*4, address(#cbNeeded)); // получить список процессов
for(int i=0; i<cbNeeded/4; i++){ if(idProcess[i] == process)return 1; } // если найден нужный
return 0;
}
CREATE_TIMER(0, 100)
{
textout(0, 0, 0, format(x), 1);
x++;
}
Запускает блокнот и ждёт когда его закроют, таймер при этом работает. |
|
|
|