Форум: "WinAPI";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизПрограммное закрытие окна Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c