Autor |
Beitrag |
sebastianf
      
Beiträge: 17
|
Verfasst: So 25.04.04 19:31
Nachdem ich nun meine Icons anklicken kann (vorherige Post  )
Möchte ich die LNK Verknüpfungen mittels Shellexecute starten.
Delphi-Quelltext 1:
| shellexecute(0,'open',pchar('C:\Freecell.lnk'),nil,pchar('C:\'),sw_show); |
da tut sich leider nichts.
Ich habe versucht, mittles FindExecutable die entsprechende Exe zu finden, bekomme allerdings nie einen entsprechenden Wert zurückgeliefert.
Wo ist denn da (schon wieder) der Haken ?
Moderiert von Peter Lustig (21:28, 25.04.2004): Code- durch Delphi-Tags ersetzt
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 25.04.04 19:35
Hi,
Probier's mal so:
Delphi-Quelltext 1:
| ShellExecute(0, nil, PChar('C:\Freecell.lnk'), nil, PChar('C:\'), SW_SHOW); |
|
|
sebastianf 
      
Beiträge: 17
|
Verfasst: So 25.04.04 19:45
Leider nein..
danke trotzdem ... 
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 25.04.04 19:51
Bei mir funktioniert das problemlos (WinXp)
Existiert 'C:\Freecell.lnk' überhaupt?
Check's mal:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| uses ShellApi;
procedure TForm1.Button1Click(Sender: TObject); begin if FileExists('C:\Freecell.lnk') then ShellExecute(0, nil, PChar('C:\Freecell.lnk'), nil, PChar('C:\'), SW_SHOW) else ShowMessage('C:\Freecell.lnk nicht gefunden'); end; |
|
|
sebastianf 
      
Beiträge: 17
|
Verfasst: So 25.04.04 19:58
Leider ebenfalls nicht.
Nutze WindowsXP, Delphi7, Shellapi eingebunden ...
er geht in den richtigen Zweig, und startet trotzdem nicht...
hier mal der vollständige code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit Unit1; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,shellapi;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin if FileExists('C:\Freecell.lnk') then ShellExecute(0, nil, PChar('C:\Freecell.lnk'), nil, PChar('C:\'), SW_SHOW)
else ShowMessage('C:\Freecell.lnk nicht gefunden'); end; end. |
.. ist eigentlich trivial - aber es klappt leider nicht.
Moderiert von Peter Lustig (21:26, 25.04.2004): Code- durch Delphi-Tags ersetzt
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 25.04.04 20:01
Zitat: | Leider ebenfalls nicht. |
Was meinst du damit? Existiert nun 'C:\Freecell.lnk' oder nicht?
|
|
sebastianf 
      
Beiträge: 17
|
Verfasst: So 25.04.04 20:03
sorry - also die Datei existiert selbstverständlich - er verzweigt auch in den richtigen pfad -
überprüft mit :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); begin if FileExists('C:\Freecell.lnk') then begin ShellExecute(0, nil, PChar('C:\Freecell.lnk'), nil, PChar('C:\'), SW_SHOW); showmessage('Datei existiert'); end else ShowMessage('C:\Freecell.lnk nicht gefunden'); end; end. |
aber die verflixte Exe startet nicht
hab grad was rausgefunden :shellexecute gibt 31 zurück! (SE_ERR_NOASSOC )
laut der OH bedeutet das : "Mit der angegebenen Dateinamenserweiterung ist keine Anwendung verknüpft"
Glaub ich nicht - mit einem doppelklick auf die verknüpfung startet das jeweilige Programm (hier z.B. Freecell)
Moderiert von Peter Lustig (21:26, 25.04.2004): Code- durch Delphi-Tags ersetzt
|
|
sebastianf 
      
Beiträge: 17
|
Verfasst: So 25.04.04 21:04
Ich habe die Lösung rausgefunden:
Da die LNK Dateien aus irgendeinem Grund nicht gestartet werden können,
lese ich mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure ShowTarget(LinkFile : WideString); var IU : IUnknown; SL : IShellLink; PF : IPersistFile; FindDate : TWin32FindData; TargetFile : array[0..MAX_PATH] of char; begin IU := CreateComObject(CLSID_ShellLink); SL := IU as IShellLink; PF := SL as IPersistFile; PF.Load(PWideChar(LinkFile), STGM_READ); SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI); SL.GetPath(TargetFile, MAX_PATH, FindDate, SLGP_UNCPRIORITY); ShowMessage(TargetFile); end; |
die ausführbare Exe aus, und starte diese dann mit shellexecute ! Das klappet
Moderiert von Peter Lustig (21:27, 25.04.2004): Code- durch Delphi-Tags ersetzt
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: So 25.04.04 21:15
Hi,
Habe auch an deine Lösung gedacht, jedoch nimmt's mich Wunder, warum das mit
ShellExecute nicht geht...?
|
|
sebastianf 
      
Beiträge: 17
|
Verfasst: So 25.04.04 21:20
frag mich nicht - keine Ahnung.
hab mich sogar etwas auf msdn umgesehen, aber hab auch keine lösung !
danke dir trotzdem 1000 mal für deine mühe !
bis die tage 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 25.04.04 21:28
Hallo, sebastianf!
Bitte benutze demnächst die Delphi-Tags. Durch die Delphi-Tags wird der Code mit Syntax-Highlighting angezeigt und ist somit sehr viel übersichtlicher.
Viele Dank!
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 26.04.04 18:04
Und was für einen Wert liefert Shellexecute zurück?
|
|
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 02.11.04 16:54
Ich würde auch gerne Verknüpfungen per ShellExecute öffnen. Daher bin ich auf diesen Thread gestoßen. Wie ich auch nach vergeblichen Versuchen festgestellt habe, funktioniert das nicht mit dem Pfad der lnk-Datei und deshalb wollt ich den von sebastianf geposteten Code ausprobieren. Nur leider kann ich das ganze nicht kompilieren. Habe auch WinXp und Delphi 7 und alles mögliche bei den Uses eingebunden, aber offenbar nicht das richtige um "IPersistFile" zu kompilieren. Freue mich auf Erklärungen/Lösungen zu diesem Problem..
Mfg
10f10
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 02.11.04 17:27
|
|
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 02.11.04 17:41
"Active X" wars. Danke für die schnelle Hilfe 
|
|