Entwickler-Ecke

Sonstiges (Delphi) - PRoblem mit shellexecute-Dateipfad


Mäthew Glide - Sa 21.08.10 13:06
Titel: PRoblem mit shellexecute-Dateipfad
Hallo!
ICh habe da ein Problem mit der Function shellexecute() und zwar will ich einen Spielemanager erstellen der von jedem Benutzer an einem PC genutzt werden kann dafür habe ich den Usernamen mit GetCurrUserName herausbekommen da dieser rückgabe wert allerdings ein string ist und ich für den Pfad bei shellexecute ein pwidechar brauche habe ich versuch den PFad mir zusammenzsetzen allerdings kommt wird der PFad immer nur bis C:\Users\USername ausgegeben.

Dann noch den Code den ich benutze:


Quelltext
1:
2:
3:
4:
5:
6:
var user: string;

begin
user:=getcurrusername;
shellexecute(application.Handle, 'open', 'C:\Users\'+pwchar(user)+'\Desktop\wunschexe.exe', nil, nil, sw_show);
end;


Xion - Sa 21.08.10 13:14

probier mal PChar('C:\Users\'+user+'\Desktop\wunschexe.exe')


Mäthew Glide - Sa 21.08.10 13:32

nein macht er nicht er öffnet dann immer nur bis c:\Users\Username und den Rest vernachlässigt er.


jaenicke - Sa 21.08.10 15:28

Das ist doch sowieso Blödsinn. Woher willst du denn wissen, dass es c:\users ist? Bei mir ist es das zum Beispiel nicht (da ist es d:\users).

Deshalb mach es doch lieber gleich richtig:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
uses
  ShellAPI, ShlObj, ActiveX;

// aus: http://www.delphi-library.de/viewtopic.php?t=9428
// Gibt den Pfad des übergebenen Ordners zurück.
function GetSpecialFolder(AFolder: Integer): string;
var
  pIdL: PItemIDList;
  Path: array[0..Max_Path] of Char;
  Allocator: IMalloc;
begin
  // ItemIdList für den Ordner holen
  SHGetSpecialFolderLocation(0, aFolder, pIdL);
  // ItemIdList in String umwandeln lassen
  SHGetPathFromIDList(pIDL, Path);
  // Speicher wieder freigeben
  if Succeeded(SHGetMalloc (Allocator)) then
    Allocator.Free (pIdL);
  Result := Path;
end;

ShellExecute(Application.Handle, 'open', PChar(GetSpecialFolder(CSIDL_DESKTOPDIRECTORY) + '\wunschexe.exe'), nil,
  PChar(GetSpecialFolder(CSIDL_DESKTOPDIRECTORY)), SW_SHOW);


Mäthew Glide - Sa 21.08.10 15:58

Oh danke dass du mich darauf aufmerksam gemacht hast... DAs habe ich irgendwie ignoriert gehabt. Zwischenzeitlich hatte ich es aber geschafft dass der Dateipfad komplett ausgeben wurde und auch ausgeführt wird. Nun habe ich das von jaenicke eingefügt und es gibt mir auch den PFad zurück allerdings führt es dann das PRogramm nicht aus. Könnte das daran liegen dass es sich um eine Verknüpfung handelt?

Edit: Problem gelöst hatte falschen Dateinamen angegeben.