![]() |
Systemvariable SYSTEMROOT verwenden
gibt es nicht eine systemvariable %SYSTEMROOT% oder so?
kann ich die ganz normal so verwenden?
Delphi-Quellcode:
copyFile('hallo.txt',%SYSTEMROOT%+'/Programme/test.txt',false);
|
Re: Systemvariable SYSTEMROOT verwenden
Was soll %SYSTEMROOT% sein?nUnd wer sagt dir dass der Programmeordner nicht wo anders hin verschoben wurde vom Administartor? Und was machst du, unter einem anders sprachigem Windows, wo er nicht mehr "Programme" heißt?
Mimm lieber die API Funktion, um die Systemordmer zu ermittlen: ![]() |
Re: Systemvariable SYSTEMROOT verwenden
Das ist eine Umgebungsvariable (Environment), so wie du es tust kannst du die sie nicht benutzen.
Nimm statt dessen die API-Funktion ![]() Für das was du vorhast - C:\Programme finden nehme ich an - kannst du besser ![]() //EDIT: Mal wieder zu spät... |
Re: Systemvariable SYSTEMROOT verwenden
Wie bereits gesagt, sollte man das Windows Verzeichniss über Windows API ermitteln.
Delphi-Quellcode:
function GetWinDir:String;
var Buffer: PAnsiChar; Len:Cardinal; begin Buffer := nil; Len := GetWindowsDirectory(Buffer,0); Buffer := allocMem(Len); GetWindowsDirectory(Buffer,Len); Result := Buffer; FreeMem(Buffer); end; |
Re: Systemvariable SYSTEMROOT verwenden
luckie:
was habe ich da falsch gemacht?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin showMessage(self.GetShellFolder(CSIDL_MYDOCUMENTS)+'\test.txt'); //------> gibt '\test.txt' aus CopyFile('hallo.txt',PChar(self.GetShellFolder(CSIDL_MYDOCUMENTS)+'\test.txt'),false); end; |
Re: Systemvariable SYSTEMROOT verwenden
Also mit CSIDL_DESKTOP geht es:
Delphi-Quellcode:
Mit CSIDL_MYDOCUMEBNTS bekomme ich das gleiche Ergebnis wie du.
uses
ShlObj, ActiveX; function GetShellFolder(CSIDL: integer): string; var pidl : PItemIdList; FolderPath : string; SystemFolder : Integer; Malloc : IMalloc; begin Malloc := nil; FolderPath := ''; SHGetMalloc(Malloc); if Malloc = nil then begin Result := FolderPath; Exit; end; try SystemFolder := CSIDL; if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then begin SetLength(FolderPath, max_path); if SHGetPathFromIDList(pidl, PChar(FolderPath)) then begin SetLength(FolderPath, length(PChar(FolderPath))); end; end; Result := FolderPath; finally Malloc.Free(pidl); end; end; const CSIDL_MYDOCUMENTS = $000C; CSIDL_DESKTOP = $0000; procedure TForm1.Button1Click(Sender: TObject); begin showMessage(GetShellFolder(CSIDL_DESKTOP) + '\test.txt'); end; |
Re: Systemvariable SYSTEMROOT verwenden
Probier mal CSIDL_PERSONAL = beim mir Eigene Dateien, allerdings ohne "self.", die Funktion braucht nicht ins Formular eingebunden zu werden.
|
Re: Systemvariable SYSTEMROOT verwenden
ok danke! funktioniert!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz