![]() |
ShellFolder anlegen?
Hallo,
kann mir jemand sagen, wie man mit Delphi 7 einen Ordner (Typ IShellMenu) im Startmenü erstellt, der aus einen anderen Ordner mit weiteren Links verlinkt? |
Re: ShellFolder anlegen?
Also, der Anfang steht im PSDK:
Zitat:
Delphi-Quellcode:
Angabe ohne Gewähr, aber prinzipiell geht´s mit den meisten Interfaces so. Hinter dem MS-XML-Interface DomDocument40 steckt in der Create-Funktion nämlich auch nichts anderes.
ism := CreateComObject(CLSID_MenuBand) as IShellMenu;
if(ism <> nil) then try ism.Initialize; { ... } finally ism := nil; end; Allerdings kann ich mit deiner Beschreibung nicht viel anfangen. Ich hoffe, du redest nicht von [cl]"Verknüpfung"[/cl]en. |
Re: ShellFolder anlegen?
So ähnlich habe ich es probiert. Aber der Compiler meldet immer, daß er IShellMenu nicht kennt. Andere IShell...-Ausdrücke, wie z.B. IShellLink kennt er.
Zum Verständnis meiner Frage, ich möchte auf Wechselmedien (CD, USB-Datenträger, etc.) Programme, Tools, etc. installieren. Auf dem Datenträger ist dann in einem Ordner ?:\Startmenü die Menüstruktur für das Windows-Startmenü abgelegt. Beim Einlegen des Datenträger läuft soll dann ein Autorun-Programm starten, daß den Laufwerksbuchstaben prüft und ggf. ändert. Anschließend soll - sofern nicht vorhanden - im Startmenu (%UserProfile%\Startmenü\Programme\) eine Ordner-Verknüpfung angelegt werden. Mit IShellLink funktioniert es nicht, da öffnet sich nach anklicken der Verknüpfung ein Fenster mit den weiteren Ordnern/Links. Es soll aber das Menü normal aufgeklappt werden. Wenn man die Verküpfung unter XP manuell anlegt, funktioniert es! |
Re: ShellFolder anlegen?
Zitat:
![]() Zitat:
IShellMenu wird IMHO verwendet, um bspw. das Start- oder Favoritenmenü einfacher verwalten und evtl. in eigene Anwendungen integrieren zu können. Aber das lasse ich mal so im Raum stehen, denn ich habe gestern bloß einen kurzen Blick ins PSDK geworfen um herauszufinden, was dieses IShellMenu überhaupt macht. |
Re: ShellFolder anlegen?
Mit IShellLink habe ich es in allen mir bekannten Varianten probiert. Ich erhalte immer nur einen Eintrag im Startmenü, bei dessen anklicken sich der verknüpfte Ordner als neues Fenster öffnet.
Wenn ich mir die Windows-eigenen Eigenschaftsfenster der beiden Verknüpfungen ansehen, so sind dort signifikante Unterschiede erkennbar. Wenn ich mir in der CMD-Box das Verzeichnis ansehe, so ist der mit IShellLink erstelle "Ordner" eine Verknüpfung ".lnk". Bei dem manuell erstellten Ordner habe ich scheinbar einen "normalen" Ordner, der eine Datei namens "target.lnk" enthält. Aber der Ordner besitz definitiv andere Eigenschaften, als ein mit MkDir erstellter Ordner. Beim Umsetzen des IShellMenu-Objektes aus C in Delphi werde ich sicherlich verzweifeln, da ich keine Ahnung von C habe und meine Delphi-Kenntnisse noch im Anfänger-Status sind. Ich komme aus der VBA-Programmierung für Excel und Word. |
Re: ShellFolder anlegen?
Zitat:
Aber wie kommst du eigentlich darauf, dass IShellMenu das richtige Interface ist? Hast du ein C-Beispiel o.ä., oder ist das einfach nur geraten? |
Re: ShellFolder anlegen?
Sorry,
ich hatte mich mit der Aussage "manuell erstellt" unpräzise ausgedrückt. Ich habe den Ordner vom USB-Stick kopiert und dann mit "Verküpfung einfügen" im Startmenü abgelegt und anschließend umbenannt. Und dieses Vorgehen unterscheidet sich von dem Befehl "Neuer Ordner" bzw. dem mit IShellLink angelegten Ordner-Verknüpfung. Ich weis nur noch nicht wie? |
Re: ShellFolder anlegen?
Das beantwortet aber noch nicht
diese Frage Aber wie kommst du eigentlich darauf, dass IShellMenu das richtige Interface ist? Hast du ein C-Beispiel o.ä., oder ist das einfach nur geraten? |
Re: ShellFolder anlegen?
Bin bei meiner Suche nach Informationen zu diesem Thema auf die MSDN-Seite zum Thema
![]() |
Re: ShellFolder anlegen?
Also, ich hab´s eben auch mal probiert. Das sieht mir mehr nach einer Art "Hard link" aus. Wie ich bemerkt habe, ist der Name der Verknüpfung "target.lnk" (hast du ja auch erwähnt), und wenn man den ändert, dann funktioniert die Sache nicht mehr. Außerdem steckt noch eine versteckte "desktop.ini" im gleichen Ordner. ;)
Du könntest dein Glück mal mit Assarbads ![]() Aber wie dem auch sei, ich denke, eine passende API-Funktion könnte die Lösung deines Problems sein. Das o.g. Interface wirst du gar nicht brauchen, und IMHO erfüllt es ohnehin eine andere Aufgabe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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-2025 by Thomas Breitkreuz