Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zugriff mit shellexecute klappt nicht mehr


D. Annies - Mo 03.05.10 07:22
Titel: Zugriff mit shellexecute klappt nicht mehr
Hi, Delpher,
ich habe jetzt von XP auf Win7 gewechselt. Natürlich klappt dann der folgende Aufruf
nicht mehr:


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TBuchMain.to_do(Sender: TObject);
begin
  ShellExecute(Handle, nil, PChar('C:\WINXP\notepad.exe'),
    PChar(label30.caption+ 'to_do.txt'), nil, SW_Show);
end;


Gibt es eine Möglichkeit, den Ort, wo das Programm jetzt liegt, per Code herauszufinden,
und dann mit shellexecute darauf zuzugreifen?

Danke, Detlef


zuma - Mo 03.05.10 07:36

versuchs mal so

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TBuchMain.to_do(Sender: TObject);
begin
  ShellExecute(Handle, nil, PChar('notepad.exe'),
    PChar(label30.caption+ 'to_do.txt'), nil, SW_Show);
end;


D. Annies - Mo 03.05.10 08:16

Klappt leider nicht!
Gruß, Detlef


elundril - Mo 03.05.10 08:23

Vielleicht sollte man auch eine Operation wie PChar('open') verwenden, damit Windows auch weiß was es tun soll. ;) In diesem Fall hätte dir MSDN oder Google oder die Forensuche sicher weitergeholfen!!


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TBuchMain.to_do(Sender: TObject);
begin
  ShellExecute(Handle, PChar('open'), PChar('notepad.exe'),
    PChar(label30.caption+ 'to_do.txt'), nil, SW_Show);
end;


lg elundril


D. Annies - Mo 03.05.10 08:43

Das klappt leider immer noch nicht!


thepaine91 - Mo 03.05.10 09:08

Suche im MSDN GETSYSTEMDIRECTORY so kannst du zuverlässig den Pfad in dem Notepad liegt ansteuern.
Dann sollte es theoretisch funktionieren wenn nicht kannst du ja mal ShellexecuteEX probieren.


delfiphan - Mo 03.05.10 09:35

Was ist die Fehlermeldung? Mach mal:

Delphi-Quelltext
1:
2:
  if ShellExecute(...) <= 32 then
    RaiseLastOSError;


D. Annies - Mo 03.05.10 10:07

Ich taste mich da jetzt ran, aber es geht noch nicht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function SystemDir: string;
var dir: array [0..MAX_PATH] of Char;
begin
  GetSystemDirectory(dir, MAX_PATH);
  Result := StrPas(dir);
end;

procedure TBuchMain.to_do(Sender: TObject);
begin
  showmessage(systemdir);
  ShellExecute(Handle, PChar('open'), PChar('notepad.exe'),
    PChar(label30.caption+ 'to_do.txt'), nil, SW_Show);
end;


Keine Fehlermeldung, aber es tut sich auch nichts. Wie ist es richtig?
Detlef


D. Annies - Mo 03.05.10 10:47

elundril, du hattest recht.
Bei mir war allerdings noch etwas anderes verstellt durch den
Systemwechsel - jetzt klappt es bestens, auch ohne GetSystemDir oder so.
Danke, Detlef