Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verknüpfung und Starteintrag erstellen (https://www.delphipraxis.net/54810-verknuepfung-und-starteintrag-erstellen.html)

ferby 11. Okt 2005 20:17


Verknüpfung und Starteintrag erstellen
 
Hallo,

Ich programmiere gerade eine Art Installationsprogramm für ein Spiel, dazu habe ich eine Frage:
Wie kann ich eine Verknüpfung und einen Starteintrag erstellen. Bitte nicht auf die Suche mit Verknüpfung Desktop verweißen, da hab ich schon gesucht und nichts gefunden.


MfG,
Ferby

LoRd-MuldeR 11. Okt 2005 20:25

Re: Verknüpfung und Starteintrag erstellen
 
Wie man Verknüpfungen mit Delphi erstellt, kann ich dir leider nich erklären.
Ein Beispiel Programm würde mich da auch interessieren.

Aber: Hast du mal drüber nachgedacht dein Installationsprogramm einfach mit NSIS anstatt mit Delphi zu erstellen? Spart sicher ne Menge Arbeit und lässt dir trotzdem alle Freiheiten.

ferby 11. Okt 2005 21:03

Re: Verknüpfung und Starteintrag erstellen
 
Hallo,

ich möchte es aber mit Delphi erstellen, das es nur teilweiße ein Installationsprogramm ist.


mfg,
Ferby

Matze 11. Okt 2005 21:06

Re: Verknüpfung und Starteintrag erstellen
 
Zitat:

Zitat von ferby
Bitte nicht auf die Suche mit Verknüpfung Desktop verweißen, da hab ich schon gesucht und nichts gefunden.

[dp]Verknüpfung desktop[/dp] ==> http://www.delphipraxis.net/internal...Cpfung+desktop


Ich glaube nicht, dass du ernsthaft gesucht hast.


Nachtrag: [dp]startmenü eintrag erstellen[/dp] ==> http://www.delphipraxis.net/internal...ct.php?t=41054

LoRd-MuldeR 11. Okt 2005 22:47

Re: Verknüpfung und Starteintrag erstellen
 
Hab jetzt mal schnell diese Unit zusammengeschustert:

Delphi-Quellcode:
unit MuldeR_Shortcut;

interface

uses
  SysUtils, Windows, ShlObj, ActiveX;

type
  TShowMode = (smNormal, smMaximized, smMinimized);

procedure CreateShortcut(ShortcutFile:String; TargetFile:String; IconFile:String;
  IconIndex:Integer; WorkingDirectory:String; ShowMode:TShowMode; Description:String);

implementation

procedure CreateShortcut(ShortcutFile:String; TargetFile:String; IconFile:String;
  IconIndex:Integer; WorkingDirectory:String; ShowMode:TShowMode; Description:String);
var
  sl:IShellLink;
  pf:IPersistFile;
  Show:Integer;
  Success:Boolean;
  Error:Boolean;
begin
  Success := False;

  case ShowMode of
    smMaximized: Show := SW_SHOWMAXIMIZED;
    smMinimized: Show := SW_SHOWMINNOACTIVE;
  else
    Show := SW_SHOWNORMAL;
  end;

  CoInitialize(nil);

  try
    if CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, sl) = S_OK then
    begin
      Error := False;

      if sl.SetPath(PAnsiChar(TargetFile)) <> S_OK then Error := True;
      if sl.SetIconLocation(PAnsiChar(IconFile), IconIndex) <> S_OK then Error := True;
      if sl.SetWorkingDirectory(PAnsiChar(WorkingDirectory)) <> S_OK then Error := True;
      if sl.SetShowCmd(Show) <> S_OK then Error := True;
      if sl.SetDescription(PAnsiChar(Description)) <> S_OK then Error := True;

      if not Error then
        if sl.QueryInterface(IPersistFile, pf) = S_OK then
          if pf.Save(StringToOleStr(ShortcutFile), True) = S_OK then
            Success := True;
    end;
  finally
    CoUninitialize;
  end;

  if not Success then raise Exception.Create('Faild to create shortcut.');
end;

end.

ferby 12. Okt 2005 16:55

Re: Verknüpfung und Starteintrag erstellen
 
Hallo,

kannst du den Quellcode auch noch ein wenig erklären?
Ich würde gerne so halb wegs verstehen was in welcher Zeile passiert.

Danke,
Ferby

LoRd-MuldeR 12. Okt 2005 18:14

Re: Verknüpfung und Starteintrag erstellen
 
Na klaro!

Mit CoIntialize() musst du zunächst mal COM initializieren.
Am Ende das CoUninitialize() nich vergessen!

Mit dem CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, sl) erstellst du den ShellLink, also die Verknüpfung. sl is ne Variable vom Typ IShellLink, das is das Interface zu deiner neuen Verknüpfung. Diesen benutzt du dazu, um bei dem Link alles einzustellen. Mit IShellLink.SetPath() legst du die Ziel-Datei fest, mit .SetDescription die Beschreibung und so weiter... Anschließend muss die Verknüpfung noch gespeichert werden. Dazu holst du dir über QueryInterface(IPersistFile, pf) ein IPersistFile interface zu deiner Verknüpfung. Jetzt nur noch mit .Save als ".lnk" Datei speichern. Finito!

BTW: IShellLink und IPersistFile muss *nicht* zerstört werden!

ferby 12. Okt 2005 20:03

Re: Verknüpfung und Starteintrag erstellen
 
Hallo,

Danke für die Antwort

also ich habe geschaft Verknüpfungen zu erstellen, jetzt will ich noch einen Starteintrag erstellen und zwar das meine Spiele unter:

Start --> Programme --> Ferby --> div. Spiele

steht, wie mach ich das???

Ferby

LoRd-MuldeR 13. Okt 2005 03:14

Re: Verknüpfung und Starteintrag erstellen
 
Du musst dir das passende Verzeichniss vom System holen.

Versuchs mal mit der "SHGetSpecialFolderPath()" funktion. Du musst dazu allerdings "ShlObj" bei deinen uses einfügen!

zu SHGetSpecialFolderPath():
1) HWND setzt du auf "Form1.Handle"
2) lpszPath setzt du auf ne Variable vom Typ PAnsiChar
3) nFolder gibt den Ordner an, denn du haben möchtest (Der Ordner "Programme" im Startmenu wird mit CSIDL_PROGARMS angewählt. Es gibt aber noch vieeeele anderer interessante CSIDLs)

Delphi-Quellcode:
var
  b:PAnsiChar;
  StartmenuProgrammeOrdner:String;
  LinkDatei:String;

begin
  b := allocMem(MAX_PATH);
  SHGetSpecialFolderPath(Form1.Handle, b, CSIDL_PROGRAMS, True);
  StartmenuProgrammeOrdner := b;
  FreeMem(b);

  ShowMessage('So, der Startmenu "Programme" Ordner lautet also:' + #10 +
    StartmenuProgrammeOrdner);

  LinkDatei := StartmenuProgrammeOrdner + '\Ferby\Spiele\Plopp.lnk';
 
  //Jetzt die Verknüpfung erstellen

ferby 13. Okt 2005 20:06

Re: Verknüpfung und Starteintrag erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

danke an alle die mir geholfen haben,
ich habe meinen Installationsprogramm fertig,
ihr könnt es mal ausprobieren und mir schreiben ob alles klappt oder auch nicht.

ferbx


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz