-
Notifications
You must be signed in to change notification settings - Fork 0
/
folders_unit.pas
104 lines (80 loc) · 2.49 KB
/
folders_unit.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
unit folders_unit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function GetSteamFolder: string;
function GetKenshiFolder: String;
function GetKenshiWorkshopFolder: string;
procedure DetectFolders;
implementation
uses registry, regexpr, fpjson;
var steamfolder: string;
var KenshiFolder: string;
var WorkshopFolder: string;
//Recuperation du dossier Steam via sa clé de registre Windows
function GetSteamFolder: string;
var Reg: TRegistry;
resultat: String;
begin
Result := '';
Reg := TRegistry.Create;
Reg.RootKey:= HKEY_LOCAL_MACHINE;
//on teste si on est sur un Windows 64 bits si oui on prend le chemin "emulé" du registe windows 32 bits.
Reg.Access:=Reg.Access or KEY_WOW64_64KEY;
if Reg.OpenKeyReadOnly('\SOFTWARE\Valve\Steam') then
resultat := Reg.ReadString('InstallPath')
else
if Reg.OpenKeyReadOnly('\SOFTWARE\WOW6432Node\Valve\Steam') then
resultat := Reg.ReadString('InstallPath');
Reg.free;
GetSteamFolder := resultat;
end;
procedure DetectFolders;
var SteamLibraries,
vdffile: Tstringlist;
i: integer;
regexp: TRegExpr;
begin
steamfolder := GetSteamFolder;
//Get Library List
SteamLibraries := Tstringlist.Create;
//Default Library
SteamLibraries.Add(SteamFolder);
//Additionnal Libraries
vdffile := Tstringlist.Create;
vdffile.LoadFromFile(SteamFolder + '\steamapps\libraryfolders.vdf');
regexp := TRegExpr.Create;
regexp.expression := '\t"\d+"\t\t"(.*)"';
for i := 0 to vdffile.Count - 1 do
begin
// Check each line on a regex to check folders name
if regexp.Exec(vdfFile.Strings[i]) then
begin
SteamLibraries.Add(StringReplace(regexp.Match[1],'\\','\',[rfReplaceAll]));
end;
end;
//And now check all these folders to find where is Kenshi !
for i := 0 to SteamLibraries.Count-1 do
begin
if FileExists(SteamLibraries.Strings[i] + '\steamapps\appmanifest_233860.acf') then
begin
KenshiFolder := SteamLibraries.Strings[i] + '\steamapps\common\Kenshi';
WorkShopFolder := SteamLibraries.Strings[i] + '\steamapps\workshop\content\233860';
end;
end;
vdffile.Free;
regexp.Free;
SteamLibraries.Free;
end;
//Recupration du dossier de Kenshi via son fichier Manifest dans le dossier de Steam
function GetKenshiFolder: String;
begin
getKenshiFolder := kenshifolder;
end;
//Recuperation du dossier workshop de Kenshi
function GetKenshiWorkshopFolder: string;
begin
GetKenshiWorkshopFolder := WorkshopFolder;
end;
end.