1 | function fileexists(const szFilename: string): boolean; |
---|
2 | var |
---|
3 | Handle : THandle; |
---|
4 | FindData : TWin32FindData; |
---|
5 | begin |
---|
6 | Handle := FindFirstFile(pchar(szFilename),FindData); |
---|
7 | Result := (Handle <> INVALID_HANDLE_VALUE); |
---|
8 | |
---|
9 | if(Result) then Windows.FindClose(Handle); |
---|
10 | end; |
---|
11 | |
---|
12 | function ExtractFileDrive(const szFilename: string): string; |
---|
13 | var |
---|
14 | i : integer; |
---|
15 | begin |
---|
16 | Result := ''; |
---|
17 | i := length(szFilename); |
---|
18 | while(i > 0) do |
---|
19 | begin |
---|
20 | if(szFileName[i] = ':') then |
---|
21 | begin |
---|
22 | Result := copy(szFilename,1,i); |
---|
23 | break; |
---|
24 | end; |
---|
25 | |
---|
26 | dec(i); |
---|
27 | end; |
---|
28 | end; |
---|
29 | |
---|
30 | function ExtractFilePath(const szFilename: string): string; |
---|
31 | var |
---|
32 | i : integer; |
---|
33 | begin |
---|
34 | Result := ''; |
---|
35 | i := length(szFileName); |
---|
36 | while(i > 0) do |
---|
37 | begin |
---|
38 | if(szFileName[i] = ':') or |
---|
39 | (szFileName[i] = '\') then |
---|
40 | begin |
---|
41 | Result := copy(szFileName,1,i); |
---|
42 | break; |
---|
43 | end; |
---|
44 | |
---|
45 | dec(i); |
---|
46 | end; |
---|
47 | end; |
---|
48 | |
---|
49 | function ExtractFileName(const szFilename: string): string; |
---|
50 | var |
---|
51 | i : integer; |
---|
52 | begin |
---|
53 | i := length(szFilename); |
---|
54 | while(i > 0) do |
---|
55 | begin |
---|
56 | if(szFilename[i] = '\') then |
---|
57 | break; |
---|
58 | |
---|
59 | dec(i); |
---|
60 | end; |
---|
61 | |
---|
62 | Result := copy(szFilename,i + 1,length(szFilename)); |
---|
63 | end; |
---|
64 | |
---|
65 | function CutFileExt(const szFilename: string): string; |
---|
66 | var |
---|
67 | i : integer; |
---|
68 | begin |
---|
69 | i := length(szFilename); |
---|
70 | while(i > 0) do |
---|
71 | begin |
---|
72 | if(szFilename[i] = '.') then |
---|
73 | break; |
---|
74 | |
---|
75 | dec(i); |
---|
76 | end; |
---|
77 | |
---|
78 | if(i = 0) then Result := szFilename |
---|
79 | else Result := copy(szFilename,1,i-1); |
---|
80 | end; |
---|
81 | |
---|
82 | function ChangeFileExt(const szFileName, szNewExt: string): string; |
---|
83 | begin |
---|
84 | Result := CutFileExt(szFileName); |
---|
85 | |
---|
86 | if(szNewExt[1] <> '.') then Result := Result + '.' + szNewExt |
---|
87 | else Result := Result + szNewExt; |
---|
88 | end; |
---|
89 | |
---|
90 | function FileSearch(const Name, DirList: string): string; |
---|
91 | var |
---|
92 | I, P, L: Integer; |
---|
93 | begin |
---|
94 | Result := Name; |
---|
95 | P := 1; |
---|
96 | L := length(DirList); |
---|
97 | |
---|
98 | while(true) do begin |
---|
99 | if(fileexists(Result)) then exit; |
---|
100 | |
---|
101 | while(P <= L) and (DirList[P] = ';') do inc(P); |
---|
102 | if(P > L) then break; |
---|
103 | |
---|
104 | I := P; |
---|
105 | while(P <= L) and (DirList[P] <> ';') do inc(P); |
---|
106 | |
---|
107 | Result := copy(DirList,I,P-I); |
---|
108 | if not(Result[length(Result)] in[':','\']) then |
---|
109 | Result := Result + '\'; |
---|
110 | |
---|
111 | Result := Result + Name; |
---|
112 | end; |
---|
113 | |
---|
114 | Result := ''; |
---|
115 | end; |
---|
116 | |
---|
117 | function StrToIntDef(const s: string; const i: integer): integer; |
---|
118 | var |
---|
119 | code : integer; |
---|
120 | begin |
---|
121 | Val(s,Result,code); if(code <> 0) then |
---|
122 | Result := i; |
---|
123 | end; |
---|
124 | |
---|
125 | function IntToStr(const i: integer): string; |
---|
126 | begin |
---|
127 | Str(i,Result); |
---|
128 | end; |
---|
129 | |
---|
130 | // ----------------------------------------------------------------------------- |
---|
131 | |
---|
132 | function Format(fmt: string; params: array of const): string; |
---|
133 | var |
---|
134 | pdw1, |
---|
135 | pdw2 : PDWORD; |
---|
136 | i : integer; |
---|
137 | pc : PCHAR; |
---|
138 | begin |
---|
139 | pdw1 := nil; |
---|
140 | |
---|
141 | if High(params) >= 0 then |
---|
142 | GetMem(pdw1, (High(params) + 1) * sizeof(Pointer)); |
---|
143 | |
---|
144 | pdw2 := pdw1; |
---|
145 | for i := 0 to High(params) do |
---|
146 | begin |
---|
147 | pdw2^ := PDWORD(@params[i])^; |
---|
148 | inc(pdw2); |
---|
149 | end; |
---|
150 | |
---|
151 | pc := GetMemory(1024); |
---|
152 | if Assigned(pc) then |
---|
153 | try |
---|
154 | SetString(Result, pc, wvsprintf(pc, PCHAR(fmt), PCHAR(pdw1))); |
---|
155 | finally |
---|
156 | if (pdw1 <> nil) then FreeMem(pdw1); |
---|
157 | FreeMem(pc); |
---|
158 | end |
---|
159 | else |
---|
160 | Result := ''; |
---|
161 | end; |
---|
162 | |
---|
163 | |
---|
164 | // ----------------------------------------------------------------------------- |
---|
165 | |
---|
166 | function UpperCase(const s: string): string; |
---|
167 | var |
---|
168 | i : integer; |
---|
169 | begin |
---|
170 | Result := ''; |
---|
171 | |
---|
172 | if(length(s) > 0) then |
---|
173 | begin |
---|
174 | SetLength(Result,length(s)); |
---|
175 | for i := 1 to length(s) do |
---|
176 | Result[i] := UpCase(s[i]); |
---|
177 | end; |
---|
178 | end; |
---|
179 | |
---|
180 | function LowerCase(const s: string): string; |
---|
181 | var |
---|
182 | i : integer; |
---|
183 | begin |
---|
184 | Result := ''; |
---|
185 | |
---|
186 | if(length(s) > 0) then |
---|
187 | begin |
---|
188 | SetLength(Result,length(s)); |
---|
189 | for i := 1 to length(s) do |
---|
190 | case s[i] of |
---|
191 | 'A'..'Z','Ä','Ö','Ü': |
---|
192 | Result[i] := CHR(BYTE(s[i]) + 32); |
---|
193 | else |
---|
194 | Result[i] := s[i]; |
---|
195 | end; |
---|
196 | end; |
---|
197 | end; |
---|
198 | |
---|
199 | function LoggedUser: string; |
---|
200 | var |
---|
201 | dwLen : dword; |
---|
202 | fTest : boolean; |
---|
203 | begin |
---|
204 | Result := ''; |
---|
205 | dwLen := MAX_PATH; SetLength(Result,dwLen); |
---|
206 | |
---|
207 | fTest := GetUserName(@Result[1],dwLen); |
---|
208 | |
---|
209 | if(not fTest) and (GetLastError = ERROR_MORE_DATA) then begin |
---|
210 | SetLength(Result,dwLen); |
---|
211 | fTest := GetUserName(@Result[1],dwLen); |
---|
212 | end; |
---|
213 | |
---|
214 | if(fTest) and (Result[1] <> #0) then |
---|
215 | SetLength(Result,dwLen - 1); |
---|
216 | end; |
---|
217 | |
---|
218 | // ----------------------------------------------------------------------------- |
---|
219 | |
---|
220 | // |
---|
221 | // delete files during next reboot (code by sakura) |
---|
222 | // |
---|
223 | function DeleteFileDuringNextSystemBoot(aFileName: string): Boolean; |
---|
224 | var |
---|
225 | ShortName, |
---|
226 | winini : string; |
---|
227 | os : TOSVersionInfo; |
---|
228 | ts : array of string; |
---|
229 | f : TextFile; |
---|
230 | i : integer; |
---|
231 | begin |
---|
232 | Result := False; |
---|
233 | |
---|
234 | // get OS version |
---|
235 | os.dwOSVersionInfoSize := sizeof(TOSVersionInfo); |
---|
236 | GetVersionEx(os); |
---|
237 | |
---|
238 | case os.dwPlatformId of |
---|
239 | // NT systems |
---|
240 | VER_PLATFORM_WIN32_NT: |
---|
241 | Result := MoveFileEx(pchar(aFileName),nil, |
---|
242 | MOVEFILE_REPLACE_EXISTING + MOVEFILE_DELAY_UNTIL_REBOOT); |
---|
243 | // 9x systems |
---|
244 | VER_PLATFORM_WIN32_WINDOWS: |
---|
245 | begin |
---|
246 | // get Windows folder |
---|
247 | SetLength(winini,MAX_PATH+1); |
---|
248 | SetLength(winini,GetWindowsDirectory(@winini[1],MAX_PATH+1)); |
---|
249 | |
---|
250 | if(winini <> '') then begin |
---|
251 | if(winini[length(winini)] <> '\') then |
---|
252 | winini := winini + '\'; |
---|
253 | winini := winini + 'wininit.ini'; |
---|
254 | |
---|
255 | // get short name of the given file |
---|
256 | SetLength(ShortName,MAX_PATH+1); |
---|
257 | SetLength(ShortName, |
---|
258 | GetShortPathName(@aFilename[1],@ShortName[1],MAX_PATH+1)); |
---|
259 | |
---|
260 | if(ShortName <> '') then begin |
---|
261 | // add it to "wininit.ini" to delete |
---|
262 | // during next reboot |
---|
263 | SetLength(ts,0); |
---|
264 | |
---|
265 | {$I-} |
---|
266 | // get old file´s content |
---|
267 | AssignFile(f,winini); |
---|
268 | ReSet(f); |
---|
269 | if(IoResult = 0) then begin |
---|
270 | while(not eof(f)) do begin |
---|
271 | SetLength(ts,length(ts)+1); |
---|
272 | ReadLn(f,ts[length(ts)-1]); |
---|
273 | |
---|
274 | if(lstrcmpi('[rename]',pchar(ts[length(ts)-1])) = 0) then begin |
---|
275 | SetLength(ts,length(ts)+1); |
---|
276 | ts[length(ts)-1] := 'NUL='+ShortName; |
---|
277 | end; |
---|
278 | end; |
---|
279 | CloseFile(f); |
---|
280 | end; |
---|
281 | |
---|
282 | if(length(ts) = 0) then begin |
---|
283 | SetLength(ts,2); |
---|
284 | ts[0] := '[rename]'; |
---|
285 | ts[1] := 'NUL='+ShortName; |
---|
286 | end; |
---|
287 | |
---|
288 | // re-create |
---|
289 | ReWrite(f); |
---|
290 | Result := (IoResult = 0); |
---|
291 | if(Result) then begin |
---|
292 | for i := 0 to length(ts) - 1 do |
---|
293 | WriteLn(f,ts[i]); |
---|
294 | |
---|
295 | CloseFile(f); |
---|
296 | end; |
---|
297 | {$I+} |
---|
298 | |
---|
299 | SetLength(ts,0); |
---|
300 | end; |
---|
301 | end; |
---|
302 | end; |
---|
303 | // only 9x and NT are supported |
---|
304 | else |
---|
305 | exit; |
---|
306 | end; |
---|
307 | end; |
---|