AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExt Problem

Ein Thema von Bambuti2000 · begonnen am 16. Mai 2013 · letzter Beitrag vom 22. Mai 2013
Antwort Antwort
Benutzerbild von Bambuti2000
Bambuti2000

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

ShellExt Problem

  Alt 16. Mai 2013, 12: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 12:26 Uhr) Grund: Hab was vergessen...
  Mit Zitat antworten Zitat
Benutzerbild von Bambuti2000
Bambuti2000

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

AW: ShellExt Problem

  Alt 21. Mai 2013, 10:30
Hi, gibt's denn niemanden der ein ähnliches Problem hat oder der eine Idee hat wie man dieses hier beheben kann? Schade!

Gruß
Stefan
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ShellExt Problem

  Alt 21. Mai 2013, 10:37
Ich versteh schlichtweg nicht was du wissen magst.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: ShellExt Problem

  Alt 21. Mai 2013, 10:43
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.
As Designed. Wie sollte es den der Windows Explorer anders performant machen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bambuti2000
Bambuti2000

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

AW: ShellExt Problem

  Alt 21. Mai 2013, 11:38
Zitat:
Ich versteh schlichtweg nicht was du wissen magst.
OK,
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
Miniaturansicht angehängter Grafiken
prtscreen.png  
Stefan
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ShellExt Problem

  Alt 21. Mai 2013, 12:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bambuti2000
Bambuti2000

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

AW: ShellExt Problem

  Alt 21. Mai 2013, 21:10
Zitat:
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.
Also, ich hab das jetzt mal geändert und getestet, aber leider tut sich da nix. Kannst du evtl. mal bei dir 1-2 Untermenü-Einträge mehr erstellen und testen ob da ein ähnliches Phänomen zu verzeichnen ist?

Gruß
Stefan
Stefan
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#8

AW: ShellExt Problem

  Alt 22. Mai 2013, 07:13
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:

If successful, returns an HRESULT value that has its severity value set to SEVERITY_SUCCESS and its code value set to the offset of the largest command identifier that was assigned, plus one. For example, if idCmdFirst is set to 5 and you add three items to the menu with command identifiers of 5, 7, and 8, the return value should be MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). Otherwise, it returns a COM error value.
Du gehst leider davon aus, dass idCmdFirst immer 0 ist, und hast bei Deinem MakeResult den +1-Offset (und evtl. das Menü selber) vergessen.
  Mit Zitat antworten Zitat
Benutzerbild von Bambuti2000
Bambuti2000

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

AW: ShellExt Problem

  Alt 22. Mai 2013, 11:50
Zitat:
Du gehst leider davon aus, dass idCmdFirst immer 0 ist, und hast bei Deinem MakeResult den +1-Offset (und evtl. das Menü selber) vergessen.
Das war genau der richtige Tip !!! DANKE
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
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz