![]() |
Startmenue Eintrag erzeugen ohne JclShell
Guten Morgen Jungs und Mädels!
Ich hab ein Installationsprogramm geschrieben und möchte nun einträge ins Startmenue schreiben. Meine Suche ergab interessante Treffer. Da gibts ein JEDI .pas file genannt JclShell.pas. Auch der Delphi Easy helper verweist auf diese Quelle. Ich hab dieses file bezogen, konnte es jedoch nicht im aktuellen Projekt einbinden - jcl.inc nicht gefunden. Also wollte ich mir das jcl package besorgen und installieren. Installiert wird das ganze angeblich mit einer Install.bat welche sich bei mir überhaupt nicht rührt... kurzum ich kann die jcl Geschichten nicht einsetzen :cry: Den "Programme" Ordner kann ich bestimmen, ebenso funktioniert eine "CreateLink" Funktion, aber mit beidem schaffe ich es nicht einen simplen Eintrag unter "Programme\meinprogramm\irgendwas.lnk" zu erstellen. Nun die Frage: brauch ich zwingend dieses jcl Paket um einen Startmenueintrag vorzunehmen oder geht das auch mit Turbodelphi 2006 hausmitteln? |
Re: Startmenue Eintrag erzeugen ohne JclShell
Logisch geht das auch ohne die Jedis. Die Jedis machen auch nichts anderes, als API-Funktionen zu kapseln. Du suchst dir das Verzeichnis und erzeugst darin eine Verknüpfung. Wo hast du jetzt das Problem, wenn du weißt, wie man beides einzeln macht?
|
Re: Startmenue Eintrag erzeugen ohne JclShell
Das ist meine Vorgehensweise:
Delphi-Quellcode:
Damit möchte ich den Link erzeugen. Funktioniert prima. Ein beispielaufruf wäre:
{*******************************************************************************
* CREATE LINK * ********************************************************************************} procedure CreateLink (Target, Args, WorkDir, ShortCutName, Icon: String; IconNo: Integer); var IObj: IUnknown; Link: IShellLink; IPFile: IPersistFile; TargetW: WideString; begin IObj := CreateComObject (CLSID_ShellLink); Link := IObj as IShellLink; IPFile := IObj as IPersistFile; with Link do begin SetPath (PChar (Target)); SetArguments (PChar (Args)); SetShowCmd (SW_SHOWMINIMIZED); SetWorkingDirectory (PChar (WorkDir)); SetIconLocation (PChar (Icon), IconNo); end; TargetW := ShortCutName; IPFile.Save (PWChar (TargetW), False); End;
Delphi-Quellcode:
Soweit kein Problem.
CreateLink('c:\test.txt', '', '', 'd:\test.lnk', 'c:\icon.ico', 0);
Nun der Code um den Link ins Startmenue zu bekommen:
Delphi-Quellcode:
Ich kann einen Link direkt im Startmenue erzeugen - sobald ich ihn aber ein einen vorhandenen Ordner einfügen will passiert nix.
procedure TForm1.Button1Click(Sender: TObject);
var b:PAnsiChar; StartmenuProgrammeOrdner: String; begin b := AllocMem(MAX_PATH); SHGetSpecialFolderPath(Form1.Handle, b, CSIDL_PROGRAMS, True); StartmenuProgrammeOrdner := b; FreeMem(b); CreateLink ('C:\meinprogramm\unterordner\dwi_run.cmd', '', '', StartmenuProgrammeOrdner + '\Mein Programm 1.0\test.lnk', 'C:\test.ico', 0); End; |
Re: Startmenue Eintrag erzeugen ohne JclShell
Steht den in b was sinnvolles drin? Und existiert der Ordner Mein Programm 1.0?
Ansonsten: ![]() |
Re: Startmenue Eintrag erzeugen ohne JclShell
in b steht der Pfad zum Programme Ordner: C:\Dokumente udn Einstellungen\<Rechnername>\Startmenü\Programme
Der Ordner "Mein Programm 1.0" existiert. Allerdings nicht im Ordner <Rechnername>\Startmenü\Programme sondern in <All Users>\Startmenü\Programme. Ich hab dein Zip mal runtergeladen und schau mal rein :) Vielen Dank schon mal. |
Re: Startmenue Eintrag erzeugen ohne JclShell
Zitat:
|
Re: Startmenue Eintrag erzeugen ohne JclShell
Ich hab das nochmal geprüft.
Mein Installationsprogramm ist ein "addon" für ein bereits installiertes Tool: Hello World. Das Setup von Hello World fügt einen den Startmenü Eintrag im Ordner <All Users> hinzu. (d.h. <All Users>\Startmenü\Hello World\start.lnk)
Delphi-Quellcode:
liefert mir das Startmenü im Ordner <Rechnername>. D.h. mein Programm muss im Ordner <Rechnername> nochmal den Ordner "Hello World" anlegen und darin dann den zusätzlichen Link. Ist zwar doppelt gemoppelt aber müsste so gehen.
SHGetSpecialFolderPath(Form1.Handle, b, CSIDL_PROGRAMS, True);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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-2025 by Thomas Breitkreuz