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:
Komentar (Atom)