AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Registry: Explorer Kontextmenü zeigt sich nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Registry: Explorer Kontextmenü zeigt sich nicht

Ein Thema von martinf16 · begonnen am 13. Apr 2010 · letzter Beitrag vom 14. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 13:29
Hallo,

seit Tagen bin ich schon am probieren, einen Kontextmenü Eintrag im Explorer zu erzeugen, das alle Dateien mit meinem Programm verknüpft. Mein bisher bester Ansatz ist folgender:

Delphi-Quellcode:
//GUID_TTestContextMenuShellExt ist als Konstante definiert
  ClassID := GUIDToString(GUID_TTestContextMenuShellExt);

//* für alle Dateien
  CreateRegKey('*\Shellex\ContextMenuHandlers\TestName', '', ClassID);

//das hatten alle Scripts, die ich mir dazu angesehen habe. Aber wozu?!
  if (Win32Platform = VER_PLATFORM_WIN32_NT) then
  with TRegistry.Create do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions', True);
    OpenKey('Approved', True);
    WriteString(ClassID, 'TestName');
  finally
    Free;
  end;

  reg:=TRegistry.Create();
  Reg.RootKey:=HKEY_CLASSES_ROOT;

//Name des Eintrags, der im Kontextmenü erscheinen soll
  Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true);
  Reg.WriteString('','Titel des Eintrags');
  Reg.CloseKey;

//Dateien sollen mit dem Programm geöffnet werden
//Ich habe auch schon probiert mit command oder shell\open\command
  Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName\open\command',true);
  Reg.WriteString('', Format('"%s" "%s"', [ParamStr(0), '%1']));
  Reg.CloseKey;

  reg.free;

  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
Die entsprechenden Keys werden auch alle erzeugt, aber leider erscheint nichts im Kontextmenü. Ich denke es muss sich um eine kleine Korrektur handeln, da ich mich aber nicht so gut mit der Registry auskenne, fällt sie mir nicht ein. Es wäre sehr lieb, wenn ihr mir etwas helfen könntet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 13:40
Und wo ist die Verknüpfung zwischen deinem Menüeintrag und der ClassID unter SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions?

Guck dir doch mal an, wie die anderen Einträge dort alle aussehen. Fällt dir da was auf?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 13:57
Zitat von Luckie:
Und wo ist die Verknüpfung zwischen deinem Menüeintrag und der ClassID unter SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions?

Guck dir doch mal an, wie die anderen Einträge dort alle aussehen. Fällt dir da was auf?
Hmm.. Also ich sehe in RegEdit jetzt nur die ClassID und eine Beschreibung?! Oder wie meinst du das?! Da muss ja irgendeine Verknüpfung fehlen, sonst würde es ja funktionieren. Aber ich weiß nicht, wie man so eine Verknüpfung herstellen kann..
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 14:09
Richtig und was schreibst du anstelle der ClassID dahin:
Delphi-Quellcode:
Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true);
Reg.WriteString('','Titel des Eintrags');
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 14:13
in "*\shellex\ContextMenuHandlers\myname" werden die ClassIDs "registrierter" ContextMenu-Handler (meißt DLLs) angegeben

in "*\shell\myname" kannst du direkt eine Exe verknüpfen (hierfür gibt es in der DP auch mehrere Beispiele zu finden)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 14:15
Zitat von himitsu:
in "*\shellex\ContextMenuHandlers\myname" werden die ClassIDs "registrierter" ContextMenu-Handler (meißt DLLs) angegeben
Ich gehe mal davon aus, dass er eine Shellextension hat.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 19:07
Zitat von Luckie:
Richtig und was schreibst du anstelle der ClassID dahin:
Delphi-Quellcode:
Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true);
Reg.WriteString('','Titel des Eintrags');
Also müsste ich hier die ClassID hinschreiben oder wie?! Also so:

Delphi-Quellcode:
Reg.OpenKey('*\Shellex\ContextMenuHandlers\TestName',true);
Reg.WriteString('',ClassID);
Zitat von himitsu:
in "*\shellex\ContextMenuHandlers\myname" werden die ClassIDs "registrierter" ContextMenu-Handler (meißt DLLs) angegeben

in "*\shell\myname" kannst du direkt eine Exe verknüpfen (hierfür gibt es in der DP auch mehrere Beispiele zu finden)
Das verknüpfen einer EXE unter *\shell\name war kein Problem und funktionierte auch. Dabei wurde das Programm nur jedes Mal neu geöffnet und ich habe gelesen, dass wenn man *\shellex\... benutzt dieses Problem nicht besteht. Deswegen wollte ich eine Verknüpfung mit einer EXE ins *\Shellex\ContextMenuHandlers\ schreiben.

Zitat von Luckie:
Ich gehe mal davon aus, dass er eine Shellextension hat.
Was meinst du damit genau?! Also ich habe keine DLL oder dergleichen. Ich möchte nur dass ein Kontext Menü im Exlporer erscheint, das die Dateien mit meinem Programm öffnet und den Parameter %1 dabei übergibt. Also so, wie es auch mit *\Shell\Name gehen würde. Allerdings sollen eben auch mehrere Dateien gleichzeitig übertragen werden können. Oder geht das bei *\ShellEx\ContextMenuHandlers nur mit einer DLL-Verknüpfung?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 19:22
Bauplan für einen "richtigen" ContextMenuHanlder:
http://www.experts-exchange.com/Prog..._10075157.html

Du erstellst ein Interface IContextMenu, erstellst dafür eine DLL, registrierst diese DLL bei Windows und gibst dann deine Interface-ID bei Shellex\ContextMenuHandlers an.



Mehr zu den anderen ContextMenuEinträgen:
http://msdn.microsoft.com/en-us/library/cc144171.aspx



Wenn eine Anwendung mehrmals geladen wird, aber alles nur in Einer verarbeitet werden soll,
dann schau bei Programmstart nach, ob diese Anwendung/EXE schonmal gestartet wurde und übergib dieser die nötigen Informationen.
> z.B. Hier im Forum suchenOneInstance
$2B or not $2B
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 22:06
Okay.. Schon mal vielen Dank, das sieht ja schon mal ganz gut aus. Eine DLL wollte ich eigentlich nicht mitliefern, daher bleiben eigentlich nur noch die beiden anderen Möglichkeiten (OneInstance und gemeinsame Übergabe). Die Seite von Microsoft sieht auch sehr vielversprechend aus, die werd ich mir mal in Ruhe ansehen müssen. Aber prinzipiell meint ihr geht mein Vorhaben, bei *\Shellex\ContextMenuHandlers\ mein Programm ohne DLL einzutragen oder???
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Registry: Explorer Kontextmenü zeigt sich nicht

  Alt 13. Apr 2010, 22:52
Was hast du gegen die DLL? Ein Beispiel hätte ich noch auf meiner Seite: http://www.michael-puff.de/Developer/Delphi/Programme -> ExifReader1_1.zip
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:25 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