Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Startmenue Eintrag erzeugen ohne JclShell (https://www.delphipraxis.net/80320-startmenue-eintrag-erzeugen-ohne-jclshell.html)

Ajin 7. Nov 2006 08:26


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?

Luckie 7. Nov 2006 08:31

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?

Ajin 7. Nov 2006 09:44

Re: Startmenue Eintrag erzeugen ohne JclShell
 
Das ist meine Vorgehensweise:

Delphi-Quellcode:
{*******************************************************************************
*  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;
Damit möchte ich den Link erzeugen. Funktioniert prima. Ein beispielaufruf wäre:

Delphi-Quellcode:
CreateLink('c:\test.txt', '', '', 'd:\test.lnk', 'c:\icon.ico', 0);
Soweit kein Problem.

Nun der Code um den Link ins Startmenue zu bekommen:

Delphi-Quellcode:
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;
Ich kann einen Link direkt im Startmenue erzeugen - sobald ich ihn aber ein einen vorhandenen Ordner einfügen will passiert nix.

Luckie 7. Nov 2006 10:18

Re: Startmenue Eintrag erzeugen ohne JclShell
 
Steht den in b was sinnvolles drin? Und existiert der Ordner Mein Programm 1.0?

Ansonsten: http://www.michael-puff.de/dirindex....phi/Programme/ -> LinkMaker1_1.zip

Ajin 7. Nov 2006 10:38

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.

Luckie 7. Nov 2006 10:50

Re: Startmenue Eintrag erzeugen ohne JclShell
 
Zitat:

Zitat von Ajin
Der Ordner "Mein Programm 1.0" existiert. Allerdings nicht im Ordner

<Rechnername>\Startmenü\Programme sondern in

<All Users>\Startmenü\Programme.

Also existiert er doch nicht, da wo der Link erzeugt werden soll. Wie willst du eine Datei in einem Ordner erzeugen, der gar nicht existiert?

Ajin 7. Nov 2006 11:09

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:
SHGetSpecialFolderPath(Form1.Handle, b, CSIDL_PROGRAMS, True);
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.


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