164 lines
3.5 KiB
Plaintext
164 lines
3.5 KiB
Plaintext
{*******************************************************}
|
|
{ }
|
|
{ Tocsg.Path }
|
|
{ }
|
|
{ Copyright (C) 2022 kkuzil }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit Tocsg.Path;
|
|
|
|
interface
|
|
|
|
function CutFileExt(sFName: String): String; {$IFDEF RELEASE} inline; {$ENDIF}
|
|
function GetFileExt(sFName: String): String; {$IFDEF RELEASE} inline; {$ENDIF}
|
|
function GetRunExePath: String; inline;
|
|
function GetRunExePathDir: String; inline;
|
|
function GetRunExeName: String; inline;
|
|
|
|
function GetRecentDir: String;
|
|
function GetDesktopDir: String;
|
|
function GetCommonDesktopDir: String;
|
|
function GetWindowsDir: String;
|
|
function GetSystemDir: String;
|
|
function GetProgramFilesDir: String;
|
|
function GetUserDir: String;
|
|
function GetProgramsDir: String;
|
|
function GetDocumentDir: String;
|
|
function GetCommonDocumentDir: String;
|
|
function GetCommonDataDir: String;
|
|
function GetInternetTempDir: String;
|
|
function GetInternetCookiesDir: String;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.SysUtils, Winapi.ShlObj, Winapi.Windows;
|
|
|
|
function CutFileExt(sFName: String): String;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
i := sFName.LastIndexOf('.');
|
|
if i <> -1 then
|
|
SetLength(sFName, i);
|
|
Result := sFName
|
|
end;
|
|
|
|
function GetFileExt(sFName: String): String;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
i := sFName.LastIndexOf('.');
|
|
if i <> -1 then
|
|
Result := Copy(sFName, i + 2, sFName.Length - i)
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function GetRunExePath: String;
|
|
begin
|
|
Result := ParamStr(0);
|
|
end;
|
|
|
|
function GetRunExePathDir: String;
|
|
begin
|
|
Result := ExtractFilePath(GetRunExePath);
|
|
end;
|
|
|
|
function GetRunExeName: String; inline;
|
|
begin
|
|
Result := ExtractFileName(GetRunExePath);
|
|
end;
|
|
|
|
function GetSpecialDir(nFolder: Integer): String;
|
|
var
|
|
pidl: PItemIDList;
|
|
hRes: HRESULT;
|
|
bSuccess: Boolean;
|
|
sRealPath: array [0..MAX_PATH] of {$IFDEF UNICODE} WideChar {$ELSE} AnsiChar {$ENDIF};
|
|
begin
|
|
Result := '';
|
|
bSuccess := false;
|
|
|
|
pidl := nil;
|
|
hRes := SHGetSpecialFolderLocation(0, nFolder, pidl);
|
|
if hRes = NO_ERROR then
|
|
begin
|
|
try
|
|
if SHGetPathFromIDList(pidl, sRealPath) then
|
|
Result := IncludeTrailingPathDelimiter(sRealPath);
|
|
finally
|
|
if pidl <> nil then
|
|
ILFree(pidl);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function GetRecentDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_RECENT);
|
|
end;
|
|
|
|
function GetDesktopDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_DESKTOPDIRECTORY);
|
|
end;
|
|
|
|
function GetCommonDesktopDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_COMMON_DESKTOPDIRECTORY);
|
|
end;
|
|
|
|
function GetWindowsDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_WINDOWS);
|
|
end;
|
|
|
|
function GetSystemDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_SYSTEM);
|
|
end;
|
|
|
|
function GetProgramFilesDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_PROGRAM_FILES);
|
|
end;
|
|
|
|
function GetUserDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_PROFILE);
|
|
end;
|
|
|
|
function GetProgramsDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_PROGRAMS);
|
|
end;
|
|
|
|
function GetDocumentDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_PERSONAL);
|
|
end;
|
|
|
|
function GetCommonDocumentDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_COMMON_DOCUMENTS);
|
|
end;
|
|
|
|
function GetCommonDataDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_COMMON_APPDATA);
|
|
end;
|
|
|
|
function GetInternetTempDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_INTERNET_CACHE);
|
|
end;
|
|
|
|
function GetInternetCookiesDir: String;
|
|
begin
|
|
Result := GetSpecialDir(CSIDL_COOKIES);
|
|
end;
|
|
|
|
end.
|