cmd获取java版本_Delphi 调用cmd获取java 版本号

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;

var

temp:String;

i:Integer;

begin

Result := TStringList.Create;

//如果是空自符串则返回空列表

if Source='' then

Exit;

temp := Source;

i:=pos(ch,Source);

while i<>0 do

begin

Result.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

Result := list[line];

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

caption:=getJavaVersion(0);

end;

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值