Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Explorer Kontext Menu Handler geht nicht unter XP/Vista (https://www.delphipraxis.net/101413-explorer-kontext-menu-handler-geht-nicht-unter-xp-vista.html)

Alex_kfm 12. Okt 2007 17:57


Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Hallo,

ich bin ein wenig verwirrt.. :wall:

Ich habe das Tutorial von Dirk Frischalowski zum Thema "Delphi-Tutorial - Kontextmenü für Windows-Explorer" http://www.del-net.com/delphi/topic10.html durchgearbeitet und auch das Demo-Projekt 1:1 übernommen (Download) und erstellen lassen. Es gibt keine Fehler, die DLL wird erzeugt und ich kann den COM-Server mittels regsvr32 einwandfrei registrieren und deregistrieren.

Doch dann passiert nix. Ich habe weder in den Kontextmenüs der Verzeichnisse noch von allen möglichen Dateien einen neuen Menüpunkt. Erst dachte ich, ist zu altes Zeug und das geht so nicht mehr, doch ein Test unter Win 2000 mit der gleichen, neu erzeugten DLL, funktionierte einwandfrei. Nur unter XP und unter Vista gibt es keinen Menueintrag?

Hat jemand schon mal versucht dieses Tutorial bzw. die Downloaddateien zu übersetzen und hatte den gleichen Fehler? Liegt es vielleicht an Delphi 2007? Das Metarial wurde wohl für Delphi 5 erstellt.

Gruß,
Der Alex

turboPASCAL 12. Okt 2007 18:36

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nö, also bei mir läuft es ohne Probleme mit XP. Für Vista muss ich es mal testen.

Anbei meine Version, etwas überarbeitet:

Alex_kfm 13. Okt 2007 16:23

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Hallo turboPASCAL,

danke für deine optimierte Fassung, doch auch diese zeigt bei mir das gleiche Verhalten, ist also nicht sichtbar.

Ich hab gestern mal ein wenig herumprobiert und habe festgestellt, dass im Kontextmenü des Start-Buttons der Eintrag zu sehen ist, auch wenn ich ihn dort gar nicht brauchen kann, da ich nur beliebig viele Dateien und Verzeichnisse an meine Anwendung weitergeben will und das beim Startbutton nicht der Fall ist oder hab ich da einen Denkfehler?!?

Wie auch immer, ich kam also auf die Idee nach einem "Störer" zu suchen, der auf allen Testmaschinen bei mir vorhanden ist, auf dem Win 2000 System aber nicht. Mir ist da nur einer aufgefallen, der G DATA AntiVirus Client, der ebenfalls in das Menü einen Eintrag zum Scannen der Dateien einbaut.

Ich hab daraufhin zum Test in einer VMware eine Win 2003 Server Version ohne AntiVirus mit der selbsterstellten DLL beglückt und siehe da, die Menüpunkte sind zu sehen! Dann hab ich nachträglich den AV-Client installiert und sie waren wieder weg, bis auf den Eintrag im Startbutton, dort ist aber auch kein Eintrag vom AV-Client!

Hmmm, kann es sein, dass sich die beiden Kontexthandler gegenseitig stören und meiner den Kürzeren zieht? Hat jemand schon mal das Problem? Oder eine Idee, wie man das lösen kann?

Danke,
Alex

Alex_kfm 14. Okt 2007 18:37

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Hallo,

in der Hoffnung das es jemanden interessiert. :-D

Ich hab mal die G DATA DLL entregistriert und dann auch meine DLL, danach zuerst meine DLL wieder registriert und alle Einträge waen da. Dann hab ich die G DATA DLL wieder registriert und siehe da, die DFKontextMenu-Einträge waren wieder verschwunden. Gibt da ne Möglichkeit, dass sich zwei Kontextmenu-Händler gegenseitig verdecken?

Nochmal der Hinweis, ich nehme die Original-Dateien von Dirk Frischalowskis Tutorial bzw. die von turboPASCAL, hab da nix verändert?!

Ich wäre über konstruktive Vorschläge sehr dankbar.

Gruß,
Alex

turboPASCAL 14. Okt 2007 19:05

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Schmeiss Bei Google suchenG DATA AntiVirus weg. :stupid:

Alex_kfm 14. Okt 2007 19:31

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
He, He... ;-)

Wenn das mal so einfach wäre, es handelt sich um die Client/Server-Version der AV-Software und die ist hier überall drauf und war auch nicht gerade billig. Außerdem muss ich damit rechnen, dass bei den Anwendern meiner Software, für die ich diesen Kontext-Händler zukünfig gern mal einsetzen würde, auch die AV-Software von G DATA verwenden. :-(

Eventuell machen das, was die G DATA Software macht, ja auch andere Anwendungen und dann funktioniert die Delphi-Variante dort nie?!

Gruß,
Alex

teebee 14. Okt 2007 19:59

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Schau Dir mal mein Posting hier an. Da hatte jemand ein ähnliches Problem mit dem gleichen Tutorial.
Es kommt auf den richtigen Rückgabewert der Funktion QueryContextMenu an, der IMO in dem Tutorial falsch ist. Ob dieser Wert korrekt ist, stellt sich erst heraus, wenn mehrere Handler sich für den gleichen Dateityp registrieren. Deshalb klappt es, sobald Du den anderen Handler "deregistrierst".

Gruß, teebee

Alex_kfm 15. Okt 2007 18:17

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Bingo teebee!! Genau so ist es...!

Man, da hätte ich ja lange suchen können, einfach aus der 4 'ne 5 und schon zählt er richtig. Der "ungenützte" Untermenüpunkt muss auch mitgezält werden, auch wenn er selbst keine Funktion hat. Das Menü ist jetzt in allen Lebenslagen sichtbar, auch mit aktivem G DATA AV! Super!

Dafür erst einmal ein Herzliches Dankeschön an teebee und turboPASCAL, ohne euch wäre ich wohl der Verzweifelung nahe gewesen. ;-)

Eine Kleinigkeit hab ich noch. Das Logo ist auch im Kontextmenu des Startbuttons sichtbar, da wird mir dann das Verzeichnis des Startnenüs übergeben, also C:\DuE\User\Startmenü. Kann man das hier verhindern, ohne dass es dann gleich für alle Verzeichnisse entfernt wird? Die G DATAs haben das so hinbekommen. Das Problem ist eben nur, dass der Menüeintrag dort keinen Sinn für meine Anwendung macht.

Gruß und Danke nochmal,
Alex

teebee 15. Okt 2007 20:00

Re: Explorer Kontext Menu Handler geht nicht unter XP/Vista
 
Der Funktion IShellExtInit.Initialize (im Tutorial TDFKontextMenuShellExt.SEInitialize) wird ein PIDL auf den Ordner übergeben, in dem die Aktion stattfindet. Mit der Funktion SHGetSpecialFolderLocation kannst Du die IDL für z.B. das Startmenü (CSIDL_STARTMENU) herausfinden (Achtung: IDL hinterher freigeben nicht vergessen!)
Jetzt hast Du zwei IDL, die Du vergleichen musst:
Du holst Dir ein IShellFolder-Interface mit SHGetDesktopFolder, davon verwendest Du die Methode CompareIDs mit den beiden IDL (die übergebene und die ermittelte), und schaust, ob sie gleich sind.
Delphi-Quellcode:
Function DoIDLEqual(pidl1: PItemIDList; pidl2: PItemIDList): Boolean;
var df: IShellFolder;
Begin
 Result := False;
 If SHGetDesktopFolder(df)=NOERROR Then
  Result := (df.CompareIDs(0,pidl1,pidl2)=0);
End;
Bei Gleichheit bist Du im Startmenü und gehst mit Result := E_FAIL; und aus der Funktion raus und nix passiert.

Gruß, teebee


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 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