Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ This function runs a program (console or batch) and adds its output to Memo1 } {....} privatefunction
RunCaptured(const
_dirName, _exeName, _cmdLine: string
): Boolean;
{....} functionTForm1.RunCaptured(const
_dirName, _exeName, _cmdLine: string
): Boolean; var
start: TStartupInfo; procInfo: TProcessInformation; tmpName: string
; tmp: Windows.THandle; tmpSec: TSecurityAttributes; res: TStringList; return: Cardinal; begin
Result := False
; try
{ Setze ein Temporares File } { Set a temporary file } tmpName := 'Test.tmp'; FillChar(tmpSec, SizeOf(tmpSec), #0); tmpSec.nLength := SizeOf(tmpSec); tmpSec.bInheritHandle := True
; tmp := Windows.CreateFile(PChar(tmpName), Generic_Write, File_Share_Write, @tmpSec, Create_Always, File_Attribute_Normal, 0); try
FillChar(start, SizeOf(start), #0); start.cb := SizeOf(start); start.hStdOutput := tmp; start.dwFlags := StartF_UseStdHandles or
StartF_UseShowWindow; start.wShowWindow := SW_Minimize;
{ Starte das Programm } { Start the program } ifCreateProcess(nil
, PChar(_exeName + ' ' + _cmdLine), nil
, nil
, True
, 0, nil
, PChar(_dirName), start, procInfo) then
begin
SetPriorityClass(procInfo.hProcess, Idle_Priority_Class); WaitForSingleObject(procInfo.hProcess, Infinite); GetExitCodeProcess(procInfo.hProcess, return); Result := (return = 0); CloseHandle(procInfo.hThread); CloseHandle(procInfo.hProcess); Windows.CloseHandle(tmp);
{ Die Ausgaben hinzufugen } { Add the output } res := TStringList.Create; tryres.LoadFromFile(tmpName); Memo1.Lines.AddStrings(res); finally
res.Free; end
; Windows.DeleteFile(PChar(tmpName)); end
else
begin
Application.MessageBox(PChar(SysErrorMessage(GetLastError())), 'RunCaptured Error', MB_OK); end
; except
Windows.CloseHandle(tmp); Windows.DeleteFile(PChar(tmpName)); raise
; end
; finally
end
; end
;
// Example: procedureTForm1.Button1Click(Sender: TObject); begin
RunCaptured('C:', 'cmd.exe', '/c dir'); end
;