Autor Beitrag
sebastianf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 25.04.04 19:31 
Nachdem ich nun meine Icons anklicken kann (vorherige Post :D )
Möchte ich die LNK Verknüpfungen mittels Shellexecute starten.

ausblenden 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 user profile iconPeter Lustig (21:28, 25.04.2004): Code- durch Delphi-Tags ersetzt
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 25.04.04 19:35 
Hi,

Probier's mal so:

ausblenden Delphi-Quelltext
1:
ShellExecute(0nil, PChar('C:\Freecell.lnk'), nil, PChar('C:\'), SW_SHOW);					
sebastianf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 25.04.04 19:45 
Leider nein..
danke trotzdem ... :(
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 25.04.04 19:51 
Bei mir funktioniert das problemlos (WinXp)
Existiert 'C:\Freecell.lnk' überhaupt?

Check's mal:

ausblenden 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(0nil, PChar('C:\Freecell.lnk'), nil, PChar('C:\'), SW_SHOW)
 else
  ShowMessage('C:\Freecell.lnk nicht gefunden');
end;
sebastianf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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:
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 if FileExists('C:\Freecell.lnk'then
   ShellExecute(0nil, 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 user profile iconPeter Lustig (21:26, 25.04.2004): Code- durch Delphi-Tags ersetzt
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 25.04.04 20:01 
Zitat:
Leider ebenfalls nicht.


Was meinst du damit? Existiert nun 'C:\Freecell.lnk' oder nicht?
sebastianf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 25.04.04 20:03 
sorry - also die Datei existiert selbstverständlich - er verzweigt auch in den richtigen pfad -
überprüft mit :

ausblenden 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(0nil, 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 user profile iconPeter Lustig (21:26, 25.04.2004): Code- durch Delphi-Tags ersetzt
sebastianf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



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

ausblenden 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
// Herstellen des IShellLink und IPersistFile zum Zugriff auf die .LNK Datei. }
  IU := CreateComObject(CLSID_ShellLink);
  SL := IU as IShellLink;
  PF := SL as IPersistFile;
// .LNK Datei in IPersistFile Objekt laden.
  PF.Load(PWideChar(LinkFile), STGM_READ);
// Den Link durch Aufruf der Resolve-Methode auflösen
  SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI);
// Jetzt kommt man an die Infos
  SL.GetPath(TargetFile, MAX_PATH, FindDate, SLGP_UNCPRIORITY);
// Zieldatei ausgeben
  ShowMessage(TargetFile);
end;


die ausführbare Exe aus, und starte diese dann mit shellexecute ! Das klappet :-)

Moderiert von user profile iconPeter Lustig (21:27, 25.04.2004): Code- durch Delphi-Tags ersetzt
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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



BeitragVerfasst: Mo 26.04.04 18:04 
Und was für einen Wert liefert Shellexecute zurück?
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



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



BeitragVerfasst: Di 02.11.04 17:27 
Gibt eigentlich nur 3 Möglichkeiten, d.h. 2
ausblenden Delphi-Quelltext
1:
2:
uses
  ShellAPI, ShlObj;

und u.U. noch
ausblenden Delphi-Quelltext
1:
2:
uses
  ActiveX;
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 02.11.04 17:41 
"Active X" wars. Danke für die schnelle Hilfe :)