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:
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;
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.
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.