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<list.Count then
      Result := list[line];
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
caption:=getJavaVersion(0);
end;

end.

相关阅读 >>

Delphi findwindow的一些用法

Delphi 热键声明和使用

Delphi 如何在tmemo,tedit或trichedit中获得插入符的位置

Delphi Delphi写的一个上位机

Delphi 生成并替换txt里的内容

Delphi enumwindows回调函数获取qq2009窗体句柄

Delphi 替换系统文件实现绕过杀软启动

Delphi 播放声音 建议采用 异步方式,比较流畅

Delphi 操作sql 插入一万条数据 三种方式速度测试

Delphi想tstringgrid中添加和删除行的方法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...