Autor Beitrag
Mäthew Glide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Sa 21.08.10 13:06 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 21.08.10 13:14 
probier mal PChar('C:\Users\'+user+'\Desktop\wunschexe.exe')

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Mäthew Glide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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);

Für diesen Beitrag haben gedankt: Mäthew Glide
Mäthew Glide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: 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.