[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    unit WinExc32;

    // This unit is based upon the well-known and largely used WinExecAndWait function
    // The former WinexecAndWait function doesn't compile under Delphi 2.0 because the
    // GetModuleUsage function is no longer supported under Win95.
    // I have simply updated the previous code so that it works with Delphi 2.0
    // under Windows 95. With this function you can call Windows-based applications
    // as well as Dos-based commands. That is 'c:\myapp\app32.exe' as well as
    // 'command.com /c del *.bak'.
    // This new WinexecAndWait32 is intended for Delphi 2.0 Win95 only,
    // it works for me but you use it at your own risk.

    // Updated : July 31, 1996.
    // Author : Francis PARLANT CIS : 100113,3015.

    interface

    function WinExecAndWait32(Path: PChar; Visibility: Word): integer;

    implementation

    function WinExecAndWait32(Path: PChar; Visibility: Word): integer;
    var
    	 Msg: TMsg;
    	 lpExitCode : integer;
    	 StartupInfo: TStartupInfo;
    	 ProcessInfo: TProcessInformation;
    begin
    	FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
    	with StartupInfo do
    	begin
    		cb := SizeOf(TStartupInfo);
    		dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    		wShowWindow := visibility; {you could pass sw_show or sw_hide as parameter}
    	end;
    	if CreateProcess(nil,path,nil, nil, False,
    		NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin
    		repeat
    			while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
    				begin
    					if Msg.Message = wm_Quit then Halt(Msg.WParam);
    					TranslateMessage(Msg);
    					DispatchMessage(Msg);
    				end;
    				GetExitCodeProcess(ProcessInfo.hProcess,lpExitCode);
    		until lpExitCode<>Still_Active;
    		with ProcessInfo do {not sure this is necessary but seen in in some code elsewhere}
    		begin
    			CloseHandle(hThread);
    			CloseHandle(hProcess);
    		end;
    		result := 0; {sucess}
    	end
    	else
    		result:=GetLastError;{error occurs during CreateProcess see help for details}
    end;

    end.

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]