Форум: "Основная";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];
ВнизКак отследить завершение запущенной мной досовской проги? Найти похожие ветки
← →
Александр_ИСТ (2003-07-22 19:21) [0]пишу так:
if (CreateProcess(nil,PChar(tmpdir+"conv.exe ""+newPath+"" /U"),
nil,nil,FALSE,CREATE_NEW_CONSOLE,nil,nil,cif,pi)=TRUE)
then
begin
WaitForSingleObject(pi.hProcess, INFINITE);
Win32Check(CloseHandle(pi.hProcess));
end;
В XP работает, в Win98 не работает. Отследил, увидел, что у меня WinXP закрывает окно досоской программы сразу же, как она завершена, а Win98 оставляет это окно висеть, только в капшионе у него написано "Сеанс завершен".
Как узнать из моей программы, когда сеанс завершен, а не когда система окно закрывает?
Желательно, код.
Спасибо!
← →
Александр_ИСТ (2003-07-22 19:23) [1]Извините за 2 раза, да еще с разными именами. Я отправлял намного больше, но что-то глючило. Подумал, что может это из-за логина.
Но на вопрос ответьте, пожалуйста!
← →
Ader_007 (2003-07-22 20:26) [2]Мне так кажется, что нужно самому закрывать окно.
Или в свойствах ярлыка указывать "закрывать окно после завершения сеанса"
← →
Александр_ИСТ (2003-07-22 21:51) [3]>Или в свойствах ярлыка указывать "закрывать окно после завершения сеанса"
Попытался создать ярлык, но нигде не нашел у него свойства "закрывать окно после завершения сеанса".
Подскажите, как до него добраться?
Или, как мне программно узнать, что сеанс завершен и окно надо закрыть?
← →
Skif (2003-07-23 06:13) [4]При запуске досевой создается пифовский файл, т.е. "программа.pif". Вот там и ищи. Это самый простой способ.
← →
Александр_ИСТ (2003-07-23 09:33) [5]
> При запуске досевой создается пифовский файл, т.е. "программа.pif".
> Вот там и ищи. Это самый простой способ.
Ну автоматически он не создается, только когда свойства поменяешь этой досовской проги. А как создать его автоматически? Подскажите название функции, если она есть, хотя бы...
← →
Ученик (2003-07-23 21:46) [6]>Александр_ИСТ (22.07.03 19:21)
function WindowProcessID(Window : HWnd) : THandle;
begin
GetWindowThreadProcessId(Window, @Result);
end;
function DosWindowState(Wnd : HWnd; lParam : DWORD) : Bool; stdcall;
var
szName : array[0..255] of Char;
sTitle : string;
begin
Result := True;
if (WindowProcessID(Wnd) = lParam) and (GetWindowText(Wnd, szName, 255) > 0) then begin
sTitle := StrPas(szName);
if (Pos("Inactive", sTitle) > 0) or (Pos("Finished", sTitle) > 0) or
(Pos("Сеанс завершен", sTitle) > 0) then begin
PostMessage(Wnd, WM_CLOSE, 0, 0);
Result := False;
end
end
end;
function DosProgramRunning(ProcessID : DWORD) : Boolean;
begin
Result := EnumWindows(@DosWindowState, ProcessID)
end;
WaitForSingleObject(pi.hProcess, INFINITE);
необходимо заменить на
while (WaitForSingleObject(pi.hProcess, 1000) = WAIT_TIMEOUT) and DosProgramRunning(pi.dwProcessID)) do Sleep(0);
или что-то похожее
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c