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 Bestimmte user Ordner öffnen (https://www.delphipraxis.net/114096-bestimmte-user-ordner-oeffnen.html)

Ajintaro 19. Mai 2008 18:00


Bestimmte user Ordner öffnen
 
Hallo!

Ich möchte verschiedene Ordner öffnen.
Dazu nutze ich:

Delphi-Quellcode:
procedure ShowFolder(strFolder: string);
begin
  ShellExecute(Application.Handle, PChar('open'), PChar(strFolder), nil, nil, SW_SHOWNORMAL);
end;

Showfolder('C:');
Funktioniert prima. Wenn ich im Windows Explorer zum Beispiel:

%tmp%
%temp%
%USERPROFILE%/Recent

eingebe öffnen sich ebenfalls Fenster mit dem entsprechenden inhalt.

Aber:

Delphi-Quellcode:
procedure ShowFolder(strFolder: string);
begin
  ShellExecute(Application.Handle, PChar('open'), PChar(strFolder), nil, nil, SW_SHOWNORMAL);
end;

Showfolder('%tmp%');
klappt natürlich nicht. Muss ich zuerst den angemeldeten user herausfinden und den string danach umbauen?

TonyR 19. Mai 2008 18:04

Re: Bestimmte user Ordner öffnen
 
Nutze folgende Function (in Klammern die Umgebungsvariable, die du möchtest, z.B. s.u.)
Delphi-Quellcode:
GetEnvironmentVariable('temp');

DeddyH 19. Mai 2008 18:09

Re: Bestimmte user Ordner öffnen
 
Oder so:
Delphi-Quellcode:
var s: string;
begin
  SetLength(s,ExpandEnvironmentStrings('%USERPROFILE%',nil,0));
  if Length(s) > 0 then
    begin
      ExpandEnvironmentStrings('%USERPROFILE%',PChar(s),Length(s));
      ShellExecute(Handle,'explore',PChar(s),nil,nil,SW_SHOW);
    end;
end;

Ajintaro 19. Mai 2008 18:16

Re: Bestimmte user Ordner öffnen
 
:thumb:

Wieder was gelernt!

cRayZo 20. Aug 2008 20:43

Re: Bestimmte user Ordner öffnen
 
welches "uses" muss ich hierfür speziell verwenden?
Mir fällt keiner ein, der passen könnte
also für das shellexecute meine ich

Luckie 20. Aug 2008 21:11

Re: Bestimmte user Ordner öffnen
 
ShellAPI. Das hätte man aber auch über die Suche finden können.

Schwedenbitter 22. Feb 2009 13:35

Re: Bestimmte user Ordner öffnen
 
Hallo,

ich habe ein Problem mit der vorgeschlagenen Vorgehensweise. Ich bekomme zwar den Pfad, kann den aber dann nicht weiter verarbeiten. Mein Code
Delphi-Quellcode:
Function AppDataPath:String;
Var
   S            : String;
Begin
   SetLength(S,ExpandEnvironmentStrings('%APPDATA%',nil,0));
   If Length(S)>0 Then
      ExpandEnvironmentStrings('%APPDATA%',PChar(S),Length(S))
   Else
      S:='';
   Result:=S;
End;


procedure TForm1.FormCreate(Sender: TObject);
begin
   Edit1.Text:='Was soll das '+AppDataPath+'\OpenOffice.org\3\user';

end;
Bringt mir immer nur "Was soll das C:\Dokumente und Einstellungen\UserAnwendungsdaten". Der von mir hinzugenommene Rest (\OpenOffice.org\3\user) erscheint nicht.

Was mache ich verkehrt?

Gruß, Alex

toms 22. Feb 2009 13:39

Re: Bestimmte user Ordner öffnen
 
Weil AppDataPath den Pfad + #0#0 zurückgibt.

Delphi-Quellcode:
function ExpandEnvStr(const szInput: string): string;
const
  MAXSIZE = 32768; // laut PSDK sind 32k das Maximum
begin
  SetLength(Result, MAXSIZE);
  SetLength(Result, ExpandEnvironmentStrings(PChar(szInput),
    @Result[1],Length(Result)) -1 ); //-1 um abschließendes #0 zu verwerfen
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := 'So geht es '+ ExpandEnvStr('%APPDATA%') +'\OpenOffice.org\3\user';
end;

himitsu 22. Feb 2009 13:54

Re: Bestimmte user Ordner öffnen
 
oder nachträglich die #0 abschneiden
Delphi-Quellcode:
Function AppDataPath: String;
Var
   S: String;
Begin
   SetLength(S, ExpandEnvironmentStrings('%APPDATA%', nil, 0));
   If Length(S) > 0 Then
      ExpandEnvironmentStrings('%APPDATA%', PChar(S), Length(S));
   Result := PChar(S);
End;


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