本文整理自网络,侵删。
unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
function splitString(const Source, ch:String):TStringList;vartemp:String;i:Integer;beginResult := TStringList.Create;//如果是空自符串则返回空列表if Source='' thenExit;temp := Source;i:=pos(ch,Source);while i<>0 dobeginResult.add(copy(temp,0,i-1));Delete(temp,1,i);i:=pos(ch,temp);end;Result.add(temp);end;
procedure CheckResult(b: Boolean);begin if not b then raise Exception.Create(SysErrorMessage(GetLastError));end;
function RunDOS(const CommandLine: string): string;var HRead, HWrite: THandle; StartInfo: TStartupInfoA; ProceInfo: TProcessInformation; b: Boolean; sa: TSecurityAttributes; inS: THandleStream; sRet: TStrings;begin Result := ''; FillChar(sa, sizeof(sa), 0); // 设置允许继承,否则在NT和2000下无法取得输出结果 sa.nLength := sizeof(sa); sa.bInheritHandle := True; sa.lpSecurityDescriptor := nil; b := CreatePipe(HRead, HWrite, @sa, 0); CheckResult(b);
FillChar(StartInfo, sizeof(StartInfo), 0); StartInfo.cb := sizeof(StartInfo); StartInfo.wShowWindow := SW_HIDE; // 使用指定的句柄作为标准输入输出的文件句柄,使用指定的显示方式 StartInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; StartInfo.hStdError := HWrite; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); // HRead; StartInfo.hStdOutput := HWrite;
b := CreateProcessA(nil, // lpApplicationName: PChar PAnsiChar(AnsiString(CommandLine)), // lpCommandLine: PAnsiChar nil, // lpProcessAttributes: PSecurityAttributes nil, // lpThreadAttributes: PSecurityAttributes True, // bInheritHandles: BOOL CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProceInfo);
CheckResult(b); WaitForSingleObject(ProceInfo.hProcess, INFINITE);
inS := THandleStream.Create(HRead); if inS.Size > 0 then begin sRet := TStringList.Create; sRet.LoadFromStream(inS); Result := sRet.Text; sRet.Free; end; inS.Free;
CloseHandle(HRead); CloseHandle(HWrite);end;
//line[0]: java version "1.8.0_91"//line[1]: Java(TM) SE Runtime Environment (build 1.8.0_91-b15)//line[2]: Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)function getJavaVersion(line : Integer): string;var tmp : string; list : TStringList;begin Result := 'no java'; tmp := runDos('java -version'); if tmp<>'' then begin list := splitString(tmp, #13#10); if line<list.Count then Result := list[line]; end;end;
procedure TForm1.FormCreate(Sender: TObject);begincaption:=getJavaVersion(0);end;
end.
相关阅读 >>
Delphi 如何在tmemo,tedit或trichedit中获得插入符的位置
Delphi enumwindows回调函数获取qq2009窗体句柄
更多相关阅读请进入《Delphi》频道 >>