![]() |
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 |
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. |
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 |
Re: Verknüpfung und Starteintrag erstellen
Zitat:
![]() Ich glaube nicht, dass du ernsthaft gesucht hast. Nachtrag: [dp]startmenü eintrag erstellen[/dp] ==> ![]() |
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. |
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 |
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! |
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 |
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 |
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. |
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