2024-01-02 16:30:52 +01:00
|
|
|
// *************************************************************************** }
|
|
|
|
//
|
|
|
|
// LoggerPro
|
|
|
|
//
|
2024-04-03 18:42:32 +02:00
|
|
|
// Copyright (c) 2010-2024 Daniele Teti
|
2024-01-02 16:30:52 +01:00
|
|
|
//
|
|
|
|
// https://github.com/danieleteti/loggerpro
|
|
|
|
//
|
|
|
|
// ***************************************************************************
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
//
|
|
|
|
// ***************************************************************************
|
|
|
|
|
2023-02-27 12:26:25 +01:00
|
|
|
unit LoggerPro.Utils;
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
|
|
|
System.SysUtils;
|
|
|
|
|
|
|
|
function AppPath: string;
|
|
|
|
{$IFDEF MSWINDOWS}
|
|
|
|
function WUserName: string;
|
|
|
|
function FileVersion(const FileName: TFileName): string;
|
|
|
|
{$ENDIF}
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
uses
|
|
|
|
{$IFDEF MSWINDOWS} Winapi.Windows, {$ENDIF}
|
|
|
|
System.IOUtils;
|
|
|
|
|
|
|
|
var
|
|
|
|
GAppPath: string = '';
|
|
|
|
|
|
|
|
{$IFDEF MSWINDOWS}
|
|
|
|
function WUserName: string;
|
|
|
|
var
|
|
|
|
nSize: DWord;
|
|
|
|
begin
|
|
|
|
nSize := 1024;
|
|
|
|
SetLength(Result, nSize);
|
|
|
|
if GetUserName(PChar(Result), nSize) then
|
|
|
|
SetLength(Result, nSize - 1)
|
|
|
|
else
|
|
|
|
RaiseLastOSError;
|
|
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
|
|
|
|
{$IFDEF MSWINDOWS}
|
|
|
|
function FileVersion(const FileName: TFileName): string;
|
|
|
|
var
|
|
|
|
VerInfoSize: Cardinal;
|
|
|
|
VerValueSize: Cardinal;
|
|
|
|
Dummy: Cardinal;
|
|
|
|
PVerInfo: Pointer;
|
|
|
|
PVerValue: PVSFixedFileInfo;
|
|
|
|
begin
|
|
|
|
Result := '';
|
|
|
|
VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
|
|
|
|
GetMem(PVerInfo, VerInfoSize);
|
|
|
|
try
|
|
|
|
if GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, PVerInfo) then
|
|
|
|
if VerQueryValue(PVerInfo, '\', Pointer(PVerValue), VerValueSize) then
|
|
|
|
with PVerValue^ do
|
|
|
|
Result := Format('v%d.%d.%d build %d', [
|
|
|
|
HiWord(dwFileVersionMS), // Major
|
|
|
|
LoWord(dwFileVersionMS), // Minor
|
|
|
|
HiWord(dwFileVersionLS), // Release
|
|
|
|
LoWord(dwFileVersionLS)]); // Build
|
|
|
|
finally
|
|
|
|
FreeMem(PVerInfo, VerInfoSize);
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
|
|
|
|
function AppPath: string;
|
|
|
|
begin
|
|
|
|
Result := GAppPath;
|
|
|
|
end;
|
|
|
|
|
|
|
|
initialization
|
|
|
|
|
|
|
|
GAppPath := IncludeTrailingPathDelimiter(TPath.GetDirectoryName(GetModuleName(HInstance)));
|
|
|
|
|
|
|
|
|
|
|
|
end.
|