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 GetProfilesDirectory in Delphi einbinden (https://www.delphipraxis.net/77175-getprofilesdirectory-delphi-einbinden.html)

Go2EITS 15. Sep 2006 16:35


GetProfilesDirectory in Delphi einbinden
 
Hi, ich hänge gerade mit "GetProfilesDirectory" aus dem
http://windowssdk.msdn.microsoft.com.../ms713356.aspx

Ich bekam als Vorschlag:
function GetProfilesDirectory;external 'userenv.dll' name 'GetProfilesDirectoryA';
Das funktioniert natürlich nicht. Ich habe es geändert:
function GetProfilesDirectory(lpProfilesDir:PChar; var lpcchSize:DWORD):bool;external 'userenv.dll' name 'GetProfilesDirectoryA';
So wird es anstandslos compiliert. Wahrscheinlich muss noch ein stdcall rein. Aber das hilft auch nicht weiter.

Der Code dazu:
Delphi-Quellcode:
function LeseBenutzerProfilVerzeichnis:string;
var
   len : DWORD;
   b:string;
   begin
   len := 264;
   SetLength(result, len);
   if not GetProfilesDirectory(PChar(b), len) then
      RaiseLastWin32Error;
   SetLength(Result, len);
end;
wobei ich b eingesetzt habe, weil benutzerprofilverz in
Delphi-Quellcode:
if not GetProfilesDirectory(PChar(benutzerprofilverz), len) then
nicht declariert wurde.

Der Aufruf ShowMessage(LeseBenutzerProfilVerzeichnis) bringt nur Exceptions. Ich habe schon einiges ausprobiert, ich komme aber keinen Schritt weiter, obwohl ich der Lösung so nah bin.
Dann wäre aus der Notlösung des Thread Linkeine Lösung geworden.

marabu 15. Sep 2006 18:49

Re: GetProfilesDirectory in Delphi einbinden
 
Hi,

vergleiche mal, wenn du magst:

Delphi-Quellcode:
unit WinUtils;

interface

  function GetProfilesDir: String;

implementation

const
  userenv = 'userenv.dll';

function GetProfilesDirectory(lpProfilesDir: PChar; var Size: DWORD): BOOL;
  stdcall; external userenv name 'GetProfilesDirectoryA';

function GetProfilesDir: String;
var
  pathName: array [0 .. MAX_PATH] of Char;
  dwSize: DWORD;
begin
  dwSize := SizeOf(pathName);
  if GetProfilesDirectory(pathName, dwSize)
    then SetString(Result, pathName, dwSize)
    else RaiseLastWin32Error;
end;

end.
Grüße vom marabu

Christian Seehase 15. Sep 2006 18:55

Re: GetProfilesDirectory in Delphi einbinden
 
Moin Go2EITS,

es gibt übrigens für verschiedene Verzeichnisse (AllUsers, DefaultUser) verschiedene solcher Funktionen.
Allerdings funktionieren diese nur auf der NT-Schiene, teilweise erst ab Windows 2000.

Go2EITS 15. Sep 2006 20:49

Re: GetProfilesDirectory in Delphi einbinden
 
@Marabu:
Probiere ich morgen aus, ok? Vielen Dank vorerst!

@Seehase: Ich habs gesehen, der Teil geht ab Windows2000. Win98/Me ist eh alter Hut, sorry.
Und da man die Winversion abfragen kann...

CU! Gute Nacht.
Go2EITS

Christian Seehase 15. Sep 2006 21:03

Re: GetProfilesDirectory in Delphi einbinden
 
Moin Go2EITS,

ich fange auch nur noch bei 2000 an ;-)
Wenn Du vorher die Windows-Version abfragen willst, darfst Du aber nicht vergessen, dass Du die Funktion dann dynamisch einbinden muss (oder bei falscher Version eben nicht ;-))

Go2EITS 17. Sep 2006 09:47

Re: GetProfilesDirectory in Delphi einbinden
 
@marabu
Guten Morgen! Herzlichen Dank! Deine Version funktioniert einwandfrei!

@Seehase
Zitat:

Wenn Du vorher die Windows-Version abfragen willst, darfst Du aber nicht vergessen, dass Du die Funktion dann dynamisch einbinden muss (oder bei falscher Version eben nicht )
Da muss ich mal in der DP reinsehen, wie man das macht. Danke für den Hinweis!

Seehase und marabu: :thumb: Bis bald!

Luckie 17. Sep 2006 17:21

Re: GetProfilesDirectory in Delphi einbinden
 
So zum Beispiel: http://www.michael-puff.de/Developer...sch_laden.html

Go2EITS 17. Sep 2006 18:35

Re: GetProfilesDirectory in Delphi einbinden
 
@Luckie:
Danke, jetzt gehts aber Schlag auf Schlag!
:thumb: Deinen Link habe ich mir angesehen und setze Eure Vorschläge in meinen Projekten um!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 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