Thema: Delphi ShellExt Problem

Einzelnen Beitrag anzeigen

Benutzerbild von Bambuti2000
Bambuti2000

Registriert seit: 11. Okt 2007
Ort: Troisdorf
44 Beiträge
 
Delphi XE2 Architect
 
#1

ShellExt Problem

  Alt 16. Mai 2013, 13:23
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.
Stefan

Geändert von Bambuti2000 (16. Mai 2013 um 13:26 Uhr) Grund: Hab was vergessen...
  Mit Zitat antworten Zitat