AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Explorer Kontext Menu Handler geht nicht unter XP/Vista
Thema durchsuchen
Ansicht
Themen-Optionen

Explorer Kontext Menu Handler geht nicht unter XP/Vista

Ein Thema von Alex_kfm · begonnen am 12. Okt 2007 · letzter Beitrag vom 15. Okt 2007
Antwort Antwort
Alex_kfm

Registriert seit: 6. Sep 2006
37 Beiträge
 
Delphi 2007 Professional
 
#1

Explorer Kontext Menu Handler geht nicht unter XP/Vista

  Alt 12. Okt 2007, 17:57
Hallo,

ich bin ein wenig verwirrt..

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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

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

  Alt 12. Okt 2007, 18:36
Nö, also bei mir läuft es ohne Probleme mit XP. Für Vista muss ich es mal testen.

Anbei meine Version, etwas überarbeitet:
Angehängte Dateien
Dateityp: zip dfkontextmenu_v2_197.zip (64,5 KB, 43x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Alex_kfm

Registriert seit: 6. Sep 2006
37 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 13. Okt 2007, 16:23
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
  Mit Zitat antworten Zitat
Alex_kfm

Registriert seit: 6. Sep 2006
37 Beiträge
 
Delphi 2007 Professional
 
#4

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

  Alt 14. Okt 2007, 18:37
Hallo,

in der Hoffnung das es jemanden interessiert.

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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

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

  Alt 14. Okt 2007, 19:05
Schmeiss Bei Google suchenG DATA AntiVirus weg.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Alex_kfm

Registriert seit: 6. Sep 2006
37 Beiträge
 
Delphi 2007 Professional
 
#6

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

  Alt 14. Okt 2007, 19:31
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
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#7

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

  Alt 14. Okt 2007, 19:59
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
  Mit Zitat antworten Zitat
Alex_kfm

Registriert seit: 6. Sep 2006
37 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 15. Okt 2007, 18:17
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
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#9

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

  Alt 15. Okt 2007, 20:00
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
  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 14:31 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