Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Как отследить завершение запущенной мной досовской проги?   Найти похожие ветки 

 
Александр_ИСТ   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-20536
The X
2003-07-26 17:41
2003.08.07
Как узнать количество символов (с пробелами) в TMemo или TDBMemo?


6-20655
HardClubber
2003-05-30 20:09
2003.08.07
Sockets


11-20461
Arioch
2002-12-03 14:57
2003.08.07
new Project & MCK 1.57


14-20698
Сергей Енин
2003-07-23 13:17
2003.08.07
Отправка e-mail


1-20574
Bosso
2003-07-24 10:48
2003.08.07
Изменение размеров шрифта