Страница 1 из 1

закрытие запущенного процесса

Добавлено: 06 июн 2013, 14:21
eagleman
Добрый день.подскажите как реализовать
в программе есть запуск ссылки:

WinExec('rundll32 url.dll,FileProtocolHandler http://www.site.html', SW_HIDE);

нужно после загрузки этой странички, закрывать потом именно это окно. Не зависимо от того, открыты ли ещё какие либо браузеры, даже если открыт тот что по умолчанию, нужно закрытие окна открытого именно оператором указанным выше.

может это всё можно реализовать не обязательно winexec?

Заранее спасибо.

Re: закрытие запущенного процесса

Добавлено: 15 июн 2013, 21:51
Dr_Grizzly
Приведу тебе такой пример:

Код: Выделить всё

....
procedure RunZipAndWait(appname:string;param:string);
Var SI: _STARTUPINFOA;
    PI: _PROCESS_INFORMATION;
begin
  GetStartupInfo(SI);
  CreateProcess(PChar(appname),PChar(param), nil, nil, true, CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI);
  WaitForSingleObject(PI.hProcess,INFINITE);
  Closehandle(PI.hProcess);
  CloseHandle(PI.hThread);
end;
....
<где-то на кнопке>:
Appl:=ExtractFilePath(application.ExeName)+'Arc\7z.exe';
Appl_Params:=' a -tzip "'+pathbase+'ARC\'+'dbase.zip'+'" "'+pathbase+'ARC\dbase.mdb';
Appl_CmdLine:=Format(' "%s" %s" ',[Appl,Appl_Params]);
RunZipAndWait(appl,Appl_CmdLine);
Данный код вызывает 7z.exe с параметрами, позволяет дождаться выполнения этой проги и только потом продолжить выполнять дальнейший код Вашей программы.
Пример отдаленный, но думаю что копать нужно Вам в этом направлении.

Re: закрытие запущенного процесса

Добавлено: 15 июн 2013, 21:55
Dr_Grizzly
И вот еще малость кода:

Код: Выделить всё

Procedure LoadProcList ( List : TStrings );
Var
Proc : Thandle;
ProcTag : TagProcessentry32;
begin
Proc := CreateToolHelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
ProcTag.dwSize := SizeOf ( ProcTag );
If Process32first ( Proc,ProcTag ) then
Repeat
List.Add ( ProcTag.szExeFile+IntToStr(ProcTag.th32ProcessID));
Until not Process32Next ( Proc, ProcTag )
End;


Procedure TermProc ( ProcID : Cardinal );
var
Proc : THandle;
begin
Proc := openprocess (PROCESS_TERMINATE, False, ProcID );
TerminateProcess ( Proc, 0 );
end;
Первая процедура получает список процессов, вторая умеет завершить указанный процесс