Главная страница
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.026 c
7-74497
R4D][
2003-08-04 19:49
2003.10.23
Редко Иногда Часто


1-74131
JibSkeart
2003-10-11 11:00
2003.10.23
TTreeView сохранение и загрузка дерева. как можно реализовать ?


14-74456
pendalf
2003-10-01 15:05
2003.10.23
Народ! Олимпиада по программингу (командная), интернет.


14-74436
VEG
2003-10-02 22:55
2003.10.23
Ну училка блин дает!


1-74287
Makhanev A.S.
2003-10-13 00:01
2003.10.23
Callback функции...