Minggu, 28 Januari 2018
Cara mengoperasikan sintak DOS secara pemrograman dengan menggunakan Delphi
Operasi sintak DOS sering digunakan dalam pemrograman antar aplikasi. misalnya GDAL adalah aplikasi grafik yang semuanya menggunakan aplikasi console, yang secara otomatis penggunaan aplikasi ini jika digabungkan dengan aplikasi delphi memerlukan sintak khusus.
setelah googling saya menemukan cara bagaimana mendapatkan response dari sintak DOS sehingga dapat memudahkan dalam pengoperasian aplikasi consol seperti GDAL di atas.
berikut adalah script yang diperlukan:
setelah googling saya menemukan cara bagaimana mendapatkan response dari sintak DOS sehingga dapat memudahkan dalam pengoperasian aplikasi consol seperti GDAL di atas.
berikut adalah script yang diperlukan:
function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of AnsiChar; BytesRead: Cardinal; WorkDir: string; Handle: Boolean; begin Result := ''; with SA do begin nLength := SizeOf(SA); bInheritHandle := True; lpSecurityDescriptor := nil; end; CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0); try with SI do begin FillChar(SI, SizeOf(SI), 0); cb := SizeOf(SI); dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow := SW_HIDE; hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin hStdOutput := StdOutPipeWrite; hStdError := StdOutPipeWrite; end; WorkDir := Work; Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine), nil, nil, True, 0, nil, PChar(WorkDir), SI, PI); CloseHandle(StdOutPipeWrite); if Handle then try repeat WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); if BytesRead > 0 then begin Buffer[BytesRead] := #0; Result := Result + Buffer; end; until not WasOK or (BytesRead = 0); WaitForSingleObject(PI.hProcess, INFINITE); finally CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; finally CloseHandle(StdOutPipeRead); end; end;
Langganan:
Postingan (Atom)