AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Systemvariable SYSTEMROOT verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Systemvariable SYSTEMROOT verwenden

Ein Thema von geisi · begonnen am 17. Okt 2005 · letzter Beitrag vom 17. Okt 2005
Antwort Antwort
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#1

Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 22:30
gibt es nicht eine systemvariable %SYSTEMROOT% oder so?
kann ich die ganz normal so verwenden?
copyFile('hallo.txt',%SYSTEMROOT%+'/Programme/test.txt',false);
mfg geisi
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 22:33
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
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 22:35
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...
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von LoRd-MuldeR
LoRd-MuldeR

Registriert seit: 9. Okt 2005
Ort: Somewhere over the Slaughterhouse
132 Beiträge
 
Delphi 7 Professional
 
#4

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 22:41
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;
  Mit Zitat antworten Zitat
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#5

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 22:54
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;
mfg geisi
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 23:08
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#7

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 23:10
Probier mal CSIDL_PERSONAL = beim mir Eigene Dateien, allerdings ohne "self.", die Funktion braucht nicht ins Formular eingebunden zu werden.
  Mit Zitat antworten Zitat
geisi

Registriert seit: 19. Sep 2003
449 Beiträge
 
Delphi 6 Professional
 
#8

Re: Systemvariable SYSTEMROOT verwenden

  Alt 17. Okt 2005, 23:13
ok danke! funktioniert!
mfg geisi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 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