Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Systemvariable SYSTEMROOT verwenden (https://www.delphipraxis.net/55196-systemvariable-systemroot-verwenden.html)

geisi 17. Okt 2005 21:30


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);

Luckie 17. Okt 2005 21:33

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: http://www.luckie-online.de/Develope...ialFolder.html

Flocke 17. Okt 2005 21:35

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 MSDN-Library durchsuchenGetWindowsDirectory.

Für das was du vorhast - C:\Programme finden nehme ich an - kannst du besser MSDN-Library durchsuchenSHGetSpecialFolderPath nehmen.

//EDIT: Mal wieder zu spät...

LoRd-MuldeR 17. Okt 2005 21:41

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;

geisi 17. Okt 2005 21:54

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;

Luckie 17. Okt 2005 22:08

Re: Systemvariable SYSTEMROOT verwenden
 
Also mit CSIDL_DESKTOP geht es:
Delphi-Quellcode:
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;
Mit CSIDL_MYDOCUMEBNTS bekomme ich das gleiche Ergebnis wie du.

scp 17. Okt 2005 22:10

Re: Systemvariable SYSTEMROOT verwenden
 
Probier mal CSIDL_PERSONAL = beim mir Eigene Dateien, allerdings ohne "self.", die Funktion braucht nicht ins Formular eingebunden zu werden.

geisi 17. Okt 2005 22:13

Re: Systemvariable SYSTEMROOT verwenden
 
ok danke! funktioniert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz