![]() |
Kontextmenü aller Dateitypen erweitern
Wie kann ich das Kontextmenü bei Klick auf eine Datei, unabhängig vom Dateityp, erweitern? So, wie es WinZIP macht oder viele Virenscanner?
Ich meine also nicht einen Kontextmenüeintrag für einen bestimmten Dateityp, der sich über die Registry verwirklichen lässt. |
Moin Orally,
dafür wirst Du Dir wohl einen ContextMenuHandler erstellen müssen. Ich bin mir jetzt allerdings nicht sicher, ob es dazu schon Beispiele hier im Forum gibt. Im PSKD ist es auf jeden Fall unter "Creating Context Menu Handlers" beschrieben. |
Oder unter HKEY_CLASSES_ROOT\*\Shell das gewünschte eintragen. Z.B. ...Shell\Open\Command. Der Eintrag gilt für alle Dateien, aber nicht für Ordner.
|
Der Eintrag bei '*' gilt allerdings auch nur für Dateitypen, die noch keinen anderen Openshell in der Registry haben.
Ich werde mir mal den Artikel im PSDK angucken, das scheint das zu sein, was ich suche. Ich bin gespannt ;). |
Ich finde bei
![]() Vergesst es *g*! Bin noch nicht ganz ausgeschlafen ;). |
Zitat:
|
@Tom Wie ich schon sagte, bei mir erschien es nur bei Datei die nicht schon einen Shellopencommand hatten.
Ok, ich hab mir jetzt mal den Artikel im PSDK angeguckt, doch richtig schlau werde ich nicht daraus. Könnte mir das vielleicht einer näher, vorallem Quelltextnäher, erklären, plz? |
Moin Orally,
zumindest bei D5 sind Demo Projekte Datei, unter anderem auch für die Erweiterung des Explorer Kontextmenüs. Dieses wäre dann zu finden im Delphi Verzeichnis unter Demos\Activex\Shellext\contmenu.dpr schau Dir das doch mal an. |
Jo, danke! Habe ich mittlerweile schon gefunden. Doch habe ich ein neues Problem. Ich versuche gerade einen Icon im Menü zu platzieren. Ich hab es mal mit folgendem Code probiert:
Delphi-Quellcode:
Was mache ich falsch?{$R Icons.res} {inhalt: 10 ICON myicon.ico} function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): HResult; var Mii: TMenuItemInfo; begin Result := 0; // or use MakeResult(SEVERITY_SUCCESS, FACILITY_NULL, 0); if ((uFlags and $0000000F) = CMF_NORMAL) or ((uFlags and CMF_EXPLORE) <> 0) then begin // Add one menu item to context menu InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst, 'Blablub...'); mii.cbSize := SizeOf(TMenuItemInfo); mii.fMask := MIIM_CHECKMARKS; mii.hbmpChecked := LoadIcon(hInstance, PChar('10')); mii.hbmpUnchecked := LoadIcon(hInstance, PChar('10')); SetMenuItemInfo(Menu, indexMenu, true, mii); SetMenuItemBitmaps(Menu, indexMenu, MF_BYPOSITION, mii.hbmpChecked, mii.hbmpUnchecked); // Return number of menu items added Result := 1; // or use MakeResult(SEVERITY_SUCCESS, FACILITY_NULL, 1) end; end; |
Moin Orally,
so aus dem Stand, ohne den Code näher zu analysieren: Du musst auf jeden Fall
Delphi-Quellcode:
nehmen, da Du ja das Icon ja mit einer Integer ID und nicht mit einem Namen versehen hast.
LoadIcon(hInstance,PChar(10));
// oder LoadIcon(hInstance,MAKEINTRESOURCE(10)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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