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

Вниз

Программное закрытие окна   Найти похожие ветки 

 
RSN ©   (2003-08-17 22:18) [0]

Создаю процесс с использованием arj, zip и т.д. Как после его завершения програмно закрыть окно (Сеанс завершен) - arj.
В свойствах это достигается путем установки галочки "Закрывать окно по завершении работы".


 
Дмитрий В. Белькевич ©   (2003-08-18 01:24) [1]

Как вариант - запускать не arj непосредственно, а создавать на него ярлык, где поставить галку "закрывать после завершения". И уже этот ярлык запускать. У меня именно так некоторые батники запускаются.


 
Song ©   (2003-08-18 08:58) [2]

Универсальная для dos и win32 процессов:

Procedure TZakazCard.CrProcess(FileName, S, Dir, WindowName: String);
Var SeInfo:TShellExecuteInfo;
ExitCode: DWord;
Begin
FillChar(SEInfo,SizeOf(SEInfo),0);
With SEInfo Do
Begin
cbSize:=SizeOf(TShellExecuteInfo);
fmask:=SEE_MASK_NOCLOSEPROCESS;
Wnd:=Application.Handle;
lpFile:=PChar("""+FileName+""");
lpParameters:=PChar(S);
lpDirectory:=nil;
nShow:=SW_HIDE;
End;
IF ShellExecuteEx(@SEInfo) then
Repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess,ExitCode);
Until (FindWindow(nil,PChar(WindowName))<>0) or
(ExitCode<>STILL_ACTIVE) or (Application.Terminated) else
Begin
ProgressForm.Close;
NewSp5Form.MakeSound(400,100);
MessageDlg("Ошибка создания внешнего процесса. Код ошибки: ZakazCardUnitx171: ""+SysErrorMessage(GetLastError)+"".",mtError,[mbAbort],0);
End;
CloseHandle(SEInfo.hProcess);
IF FindWindow(nil,PChar(WindowName))<>0 then
Begin
SendMessage(FindWindow(nil,PChar(WindowName)),WM_CLOSE,0,0);
While FindWindow(nil,PChar(WindowName))<>0 Do Application.ProcessMessages;
End;
End;


Использование:

CrProcess(...,"(Сеанс завершен) - Arj");


P.S. Выкинь лишнее.


 
nikus ©   (2003-08-18 14:12) [3]

Запускай процесс через CreateProcess, а не WinExec/ShellExecute. Тогда никаких окон типа "Сеанс завершён..." по идее быть не должно.

Когда-то писал консольную прогу для конвертации архивов, и в ней юзал такую функцию, быть может, поможет...

function RunAndWait(cmdline : string) : DWord;
var si : Startupinfo; pi : Process_Information;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.wShowWindow := SW_HIDE;
si.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES or
STARTF_FORCEONFEEDBACK;
if not CreateProcess(nil, PChar(cmdline), nil,
nil, False, 0, nil, nil, si, pi) then exit;
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, result);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;


Процесс архивации отображается в том же консольном окне, а сама программа останавливается до завершения архивации.


 
Song ©   (2003-08-18 14:34) [4]

2nikus © (18.08.03 14:12) [3]
Запусти arj в твоём варианте, комп никогда не выйдет из WaitForSingleObject(pi.hProcess, INFINITE);


 
BillyJeans ©   (2003-08-19 10:37) [5]

используй arj32.exe



Страницы: 1 вся ветка

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-74426
Kost
2003-10-05 17:57
2003.10.23
ПЕРЕМЕННЫЕ


3-73997
Nikitos
2003-09-30 19:53
2003.10.23
истоория изменений


14-74480
wicked
2003-10-02 19:37
2003.10.23
CodeGuard.....


3-74036
Abikos
2003-10-03 12:08
2003.10.23
Создание скрипта в Interbase


3-73985
explorer
2003-10-01 08:56
2003.10.23
Анализ данных