unit uAppUtils; interface USES SysUtils, XStrings, uAppUtils0; TYPE TFileVersionInfosReader= CLASS PRIVATE FFile: STRING; { sz: LONGWORD; pDatasVers: pBytes; slang: STRING; // code langage_charset } datasInfos: tDatasInfosRec; FUNCTION GetInfos(index: INTEGER): STRING; PUBLIC CONSTRUCTOR Create(CONST aFile: STRING); DESTRUCTOR Destroy; OVERRIDE; PROPERTY Company: STRING index 0 READ GetInfos; PROPERTY Description: STRING index 1 READ GetInfos; PROPERTY FileVersion: STRING index 2 READ GetInfos; PROPERTY InternalName: STRING index 3 READ GetInfos; PROPERTY Copyright: STRING index 4 READ GetInfos; PROPERTY OriginalFilename: STRING index 5 READ GetInfos; PROPERTY ProductName: STRING index 6 READ GetInfos; PROPERTY ProductVersion: STRING index 7 READ GetInfos; PROPERTY Comments: STRING index 8 READ GetInfos; // Function GetInfosExtra; END; FUNCTION GetCmdLineArg(const Switch: string; SwitchChars: TSysCharSet): STRING; OVERLOAD; FUNCTION GetCmdLineArg(const Switch: string; SwitchChars: TSysCharSet; CONST defaut: STRING): STRING; OVERLOAD; FUNCTION GetCmdLineArg(const Switch: string; CONST defaut: STRING=''): STRING; OVERLOAD; FUNCTION ComputerName(CONST defaut: STRING=''): STRING; FUNCTION UserName(CONST defaut: STRING=''): STRING; implementation USES WIndows; CONSTRUCTOR TFileVersionInfosReader.Create(CONST aFile: STRING); BEGIN datasInfos:=GetFileDatasVers(PChar(aFile)); FFile:=aFile; END; DESTRUCTOR TFileVersionInfosReader.Destroy; BEGIN With datasInfos DO IF sz>0 THEN FreeMem(pDatasVers); END; FUNCTION TFileVersionInfosReader.GetInfos(index: INTEGER): STRING; BEGIN result:=GetStringFileInfos(datasInfos,index); END; FUNCTION GetCmdLineArg(const Switch: string; SwitchChars: TSysCharSet): STRING; OVERLOAD; var I: Integer; S: string; begin for I := 1 to ParamCount do begin S := ParamStr(I); if (SwitchChars = []) or (S[1] in SwitchChars) then BEGIN DELETE(s,1,1); if (AnsiCompareText(GetNameStr(S), Switch) = 0) then begin Result := GetValueStr(s); Exit; end; END; end; Result := ''; end; FUNCTION GetCmdLineArg(const Switch: string; SwitchChars: TSysCharSet; CONST defaut: STRING): STRING; OVERLOAD; BEGIN result:=GetCmdLineArg(Switch,SwitchChars); IF LENGTH(result)=0 THEN result:=defaut; END; FUNCTION GetCmdLineArg(const Switch: string; CONST defaut: STRING=''): STRING; OVERLOAD; BEGIN result:=GetCmdLineArg(Switch,['-','/']); IF LENGTH(result)=0 THEN result:=defaut; END; FUNCTION ComputerName(CONST defaut: STRING=''): STRING; VAR l: DWORD; BEGIN l:=MAX_COMPUTERNAME_LENGTH; SETLENGTH(result,l); IF NOT GetComputerName(PChar(result),l) THEN result:=defaut ELSE SETLENGTH(result,l); END; FUNCTION UserName(CONST defaut: STRING=''): STRING; VAR l: DWORD; BEGIN l:=255; SETLENGTH(result,l); IF NOT GetUserName(PChar(result),l) THEN result:=defaut ELSE SETLENGTH(result,l-1); // car inclu le #0 terminal ! END; end.