![]() |
ShellExt Problem
Hi Leuts,
ich weiß, ShellExt sind schon oft und lange breit getreten worden, aber denn noch möchte ich mein Problem hier einstellen. Ich benötige ein Context-Menü-Erweiterung mit 4 Untermenüs. Über diese Untermenüs rufe ich ein Programm auf und übergebe zusätzlich zum Dateiname der ausgewählten Datei den ItemIndex. Eigentlich soweit kein Problem, ABER jetzt verhält sich das Ganze so, das die ersten 3 einwandfrei funktionieren, und der 4.te Eintrag immer "Microsoft Security Essentials" aufruft und die gewählte Datei dann scannt. Ist zwar auch ganz hübsch, ist aber nicht ganz das was ich wollte. Zufälliger Weise ist der "Microsoft Security Essentials" Eintrag im Context-Menü direkt über dem meinigen. Wenn jemand meinen Fehler findet und mir helfen könnte wäre ich sehr dankbar. Hier mein QueryContextMenu:
Delphi-Quellcode:
By the way, wenn noch einer eine Idee hat wie ich das Bitmap Transparent darstellen kann (mit Mask bekomme ich nur noch schwarze Symbole angezeigt), würde ich nicht enttäuscht sein. ;-)
function TListFilesContextMenu.QueryContextMenu(Menu: HMENU;
indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): HResult; var ListMenuItem: TMenuItemInfo; MenuCaption: String; SubMenu: HMENU; uId: UINT; begin Result := MakeResult(SEVERITY_SUCCESS, 0, 3); FMenuItemIndex := indexMenu; if (uFlags and CMF_EXPLORE) = CMF_EXPLORE then MenuCaption := 'Datei-/Verzeichnisliste drucken' else Result := E_FAIL; if Result <> E_FAIL then begin SubMenu := CreatePopupMenu; idFirst := idCmdFirst; idLast := idCmdLast; uId := idCmdFirst; InsertMenu(SubMenu, 0, MF_BYPOSITION, uID, PWideChar('Dateien')); Inc(uId); InsertMenu(SubMenu, 1, MF_BYPOSITION, uId, PWideChar('Dateien und Verzeichnisse')); Inc(uId); InsertMenu(SubMenu, 2, MF_BYPOSITION, uId, PWideChar('Dateien (rekursiv)')); Inc(uId); InsertMenu(SubMenu, 3, MF_BYPOSITION, uId, PWideChar('Dateien und Verzeichnisse (rekursiv)')); FillChar(ListMenuItem, SizeOf(TMenuItemInfo), #0); ListMenuItem.cbSize := SizeOf(TMenuItemInfo); ListMenuItem.fMask := MIIM_SUBMENU or MIIM_STRING or MIIM_ID; ListMenuItem.fType := MFT_STRING; ListMenuItem.wID := FMenuItemIndex; ListMenuItem.hSubMenu := SubMenu; ListMenuItem.dwTypeData := PWideChar(MenuCaption); ListMenuItem.cch := Length(MenuCaption); InsertMenuItem(Menu, indexMenu, True, ListMenuItem); try hBmp.LoadFromFile(GetFileListIcon); SetMenuItemBitmaps(Menu, indexMenu, MF_BYPOSITION, hBmp.Handle, hBmp.Handle); except end; end; end; Dank Euch Stefan PS: Da fällt mir noch was ein... OS=Win7 64Bit, und noch ein Problem, sobald die DLL registriert ist/war, wird Sie vom Explorer nicht mehr frei gegeben. Das heißt, ich muss den Task abschießen, damit ich die DLL neu kompilieren kann. |
AW: ShellExt Problem
Hi, gibt's denn niemanden der ein ähnliches Problem hat oder der eine Idee hat wie man dieses hier beheben kann? Schade! :cry:
Gruß Stefan |
AW: ShellExt Problem
Ich versteh schlichtweg nicht was du wissen magst.
|
AW: ShellExt Problem
Zitat:
|
AW: ShellExt Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
dann sag doch was. Ich hab mal einen PrintScreen gemacht. Alles funktioniert so wie es soll, nur der letzte Menüeintrag (rot markiert) ruft immer "Microsoft Security Essentials" auf. Gruß Stefan |
AW: ShellExt Problem
Einen konkreten Fehler sehe ich nicht, wohl aber was ich anders mache (und bei mir funktionieren drei Untermenüeinträge): ich weise meinem ListMenuItem.wID die nächste Nummer (bei dir uId+1) zu und nicht etwa indexMenu. Du mischt da so wie Du das machst Position und ID.
|
AW: ShellExt Problem
Zitat:
Gruß Stefan |
AW: ShellExt Problem
Vorab ein Tipp zum Debuggen unter Win64: man nehme einen Total Commander in der 32-Bit-Version und kompiliere die Extension für 32 Bit. Sobald man den wieder zumacht, ist die DLL dann auch wieder "frei" (evtl. stellt man auch in der Registry noch ein, dass DLLs nicht im Cache gehalten werden sollen, hab die Stelle gerade nicht auswendig parat).
Abhängig von den Dateien im Projektordner habe ich bis zu vier Einträge. Habe also die vierte reingelegt - auch die klappt einwandfrei. Wie wäre es, wenn Du uns auch Dein InvokeCommand zeigst? Aber ich darf Dir auch nochmal einen wichtigen Teil der Doku zitieren: Zitat:
|
AW: ShellExt Problem
Zitat:
Ich hab den Offset vergessen. Aber ich weiß leider nicht wie du darauf kommst das ich von idCmdFirst = 0 ausgehe. Hab ich noch einen Fehler? Gruß Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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