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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
eagleman
Сообщения: 1
Зарегистрирован: 06 июн 2013, 13:44

06 июн 2013, 14:21

Добрый день.подскажите как реализовать
в программе есть запуск ссылки:

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

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

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

Заранее спасибо.
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

15 июн 2013, 21:51

Приведу тебе такой пример:

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

....
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 с параметрами, позволяет дождаться выполнения этой проги и только потом продолжить выполнять дальнейший код Вашей программы.
Пример отдаленный, но думаю что копать нужно Вам в этом направлении.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

15 июн 2013, 21:55

И вот еще малость кода:

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

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;
Первая процедура получает список процессов, вторая умеет завершить указанный процесс
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить