Announcement

Collapse
No announcement yet.

Kann Delphi das Kontext Menü von Laufwerken auslesen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kann Delphi das Kontext Menü von Laufwerken auslesen?

    Wenn man im Windows Explorer (Win 95 oder NT) mit der rechten Maustaste ein Laufwerk anklickt, wird das Kontext Menü sichtbar. Bei einem CD-RW Laufwerk für PacketCD (CeQuadrat) ändert sich dieses in Abhängigkeit des eingelegten CD-Rohlings.

    Wie kann ich das aktuelle Kontext Menü mit Delphi ermitteln und davon einen speziellen Befehl ausführen?

    Im Voraus vielen Dank<br>
    Rainer

  • #2
    Hallo,

    im Delphi-Unterverzeichnis <b>Demos\ShellExt</b> findet sich ein Beispiel für einen eigenen Kontextmenü-Handler. Dort wird beschrieben, was das eigene COM-Objekt machen muss, um eigene Menüpunkte in das Kontextmenü einzufügen. Dazu wird die IContextMenu-Interface-Methode <b>QueryContextMenu</b> verwendet, wobei diese Methode als Parameter ein Handle auf das Menü erwartet.

    Im Beispielverzeichnis ist auch eine REG-Datei mit den Registry-Pfaden zu finden, so dass man dort nach dem für PacketCD zuständigen COM-Objekt suchen kann. Hat man dieses Objekt gefunden, so ist folgendes notwendig: <br>
    a) Typbibliothek dieses Objekts importieren <br>
    b) Im eigenen Programm eine Instanz über die Hilfsfunktion der CoClass (Create) anfordern. <br>
    c) Über den Interface-Zeiger auf IContextMenu zugreifen, um die Methode QueryContextMenu aufzurufen. Dabei muss als erster Parameter das Handle auf die Menü-Instanz übergeben werden, in die diese Menüpunkte eingefügt werden sollen. <br>
    d) Über die Interface-Methode <b>InvokeCommand</b> kann die zugrundeliegende Funktion des Menüpunkts aufgerufen werden.

    Wenn sich das Menü nur dann aufbauen soll, wenn tatsächlich eine PacketCD-Scheibe im Laufwerk liegt, muss anstelle von Schritt b) das Betriebssystem über den Aufruf von <b>IShellFolder.GetUIObjectOf</b> bemüht werden

    Comment


    • #3
      Vielen Dank für diese Zusammenfassung. Ich werde diese Aktion aus Zeitgründen wohl vorerst vertagen. Jedenfalls habe ich mir mit dem „Registrierungseditor“ einmal die Einträge im Zusammenhang mit CeQuadrat angesehen und kann nicht erkennen, wo ein COM-Objekt angegeben ist. Damit beginnen die Probleme bereits bei Punkt a).

      Nochmals vielen Dank <br>
      Raine

      Comment


      • #4
        Hallo,

        wenn man sich das Borland-Beispiel <i>contmenu.dpr</i> einmal anschaut, wird deutlich, das die Registry-Einträge direkt im Windows-Schlüssel (und nicht beim Hersteller des Produkts) gesucht werden müssen:
        <pre>
        HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\She ll Extensions
        </pre&gt

        Comment

        Working...
        X