R3Pa4eK
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору library InnoExec; uses Windows, SysUtils; procedure Application_ProcessMessages; var Msg: TMsg; begin if not PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then Exit; TranslateMessage(Msg); DispatchMessage(Msg); end; var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: AnsiString; function _CreateProcess(EXEName: PAnsiChar; Parameters: PAnsiChar; Show: Word): BOOL; stdcall; begin CmdLine := '"' + EXEName + '" ' + Parameters; FillChar(StartInfo, SizeOf(StartInfo), #0); with StartInfo do begin cb := SizeOf(StartInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := Show; end; Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(EXEName)),StartInfo,ProcInfo); if Result then begin while WaitForSingleObject(ProcInfo.hProcess, 10) <> WAIT_OBJECT_0 do Application_ProcessMessages; CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end end; //процедура, которая вызывается при нажатии на кнопку... procedure CloseProcess; stdcall; export; begin CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; exports _CreateProcess; exports CloseProcess; begin end. |