Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Start einer .LNK Verknüpfung mit Shellexecute
sebastianf - So 25.04.04 19:31
Titel: Start einer .LNK Verknüpfung mit Shellexecute
Nachdem ich nun meine Icons anklicken kann (vorherige Post :D )
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 ?
:oops:
Moderiert von
Peter Lustig (21:28, 25.04.2004): Code- durch Delphi-Tags ersetzt
toms - 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 - So 25.04.04 19:45
Leider nein..
danke trotzdem ... :(
toms - 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 - 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:
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: 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 - So 25.04.04 20:01
| Zitat: |
| Leider ebenfalls nicht. |
Was meinst du damit? Existiert nun 'C:\Freecell.lnk' oder nicht?
sebastianf - 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 - 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 - 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 - 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. - 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
Delete - Mo 26.04.04 18:04
Und was für einen Wert liefert Shellexecute zurück?
Delete - 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
Delete - Di 02.11.04 17:27
Gibt eigentlich nur 3 Möglichkeiten, d.h. 2
Delphi-Quelltext
1: 2:
| uses ShellAPI, ShlObj; |
und u.U. noch
Delete - Di 02.11.04 17:41
"Active X" wars. Danke für die schnelle Hilfe :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!