Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Kontextmenü des Explorere ergänzen (https://www.delphipraxis.net/22725-kontextmenue-des-explorere-ergaenzen.html)

Luckie 22. Mai 2004 13:07

Re: Kontextmenü des Explorere ergänzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wo ist hier der Denkfehler:
Delphi-Quellcode:
{*------------------------------------------------------------------------------
  Explorer-Kontextmenü erweitern
-------------------------------------------------------------------------------}

function TExifReaderExt.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst,
  idCmdLast, uflags: UINT): HResult;
resourcestring
  rsExifReader = 'ExifReader';
begin
  if ((uFlags and $0000000F) = CMF_NORMAL) or ((uFlags and CMF_EXPLORE) <> 0)
    then
  begin
    InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst,
      PChar(rsExifReader));
    Result := 1;
  end
  else
    Result := 0;
end;
Das Registrieren funktioniert wunderbar, nur bekomme ich keinen Menüpunkt zu sehen.

Falls es nötig ist, hab eich mal die ganze Unit angehangen.

MathiasSimmack 22. Mai 2004 13:23

Re: Kontextmenü des Explorere ergänzen
 
Hast du mal probiert, das nicht unter ".jpg" sondern dem dazu gehörenden Schlüssel (bei mir "jpegfile") einzutragen? So habe ich´s bei meiner Shell-Extension für LNK-Dateien gemacht. Kann auch sein, dass es nicht daran liegt, denn so ausführlich habe ich mich damit auch noch nicht beschäftigt.

Aber ich glaube immer noch, dass du zu kompliziert denkst. Greif dir den Standardschlüssel des ".jpg"-Eintrags und ergänze dort unter "shell" den Eintrag für dein Programm. Das müsste normalerweise reichen.

Luckie 22. Mai 2004 13:32

Re: Kontextmenü des Explorere ergänzen
 
Zitat:

Zitat von MathiasSimmack
Hast du mal probiert, das nicht unter ".jpg" sondern dem dazu gehörenden Schlüssel (bei mir "jpegfile") einzutragen?

Gerade probiert, geht auch nicht.
Zitat:

Aber ich glaube immer noch, dass du zu kompliziert denkst. Greif dir den Standardschlüssel des ".jpg"-Eintrags und ergänze dort unter "shell" den Eintrag für dein Programm. Das müsste normalerweise reichen.
Das will ich ja machen, siehe Source:
Delphi-Quellcode:
procedure TExifReaderExtFactory.UpdateRegistry(Register: Boolean);
var
  ClassID: string;
begin
  if Register then
  begin
    inherited UpdateRegistry(Register);
    ClassID := GUIDToString(GUID_EXIFREADEREXT);
    CreateRegKey('.jpg\shellext', '', '');
    CreateRegKey('.jpg\shellext\ContextMenuHandlers', '', '');
    CreateRegKey('.jpg\shellext\ContextMenuHandlers\ExifReaderExt', '',
      ClassID);
  end
  else
  begin
    DeleteRegKey('.jpg\shellext');
    DeleteRegKey('.jpg\shellext\ContextMenuHandlers');
    DeleteRegKey('.jpg\shellext\ContextMenuHandlers\ExifReaderExt');
    inherited UpdateRegistry(Register);
  end;
end;

sakura 22. Mai 2004 13:34

Re: Kontextmenü des Explorere ergänzen
 
Ändere ShellExt mal in ShellEx ;)

...:cat:...

MathiasSimmack 22. Mai 2004 13:52

Re: Kontextmenü des Explorere ergänzen
 
Zitat:

Zitat von Luckie
Das will ich ja machen, siehe Source

Ja, schon. Aber das ist doch zu umständlich. Ich meinte das anders -

Wenn du deinen selbst geschriebenen Texteditor als zusätzlichen Editor für Textdateien registrieren willst, dann baust du doch dafür auch keine Shell-Extension zusammen. Na ja, ich kann nur für mich sprechen ... ;) ... Also ich würde die Registry öffnen und den Standardwert von ".txt" auslesen.
Das wäre bei mir "txtfile". Diesen Schlüssel öffne ich und ergänze dann unter "shell" die notwendigen Einträge für meinen Editor. So wie man das auch macht, wenn man seinen eigenen Dateityp registriert. Nur dass ich eben nicht "open" überschreibe, sondern meinen eigenen Schlüssel für meinen eigenen Editor anlege. Dadurch kann ich Textdateien nach wie vor mit Notepad öffnen, ich kann aber auch meinen Editor nehmen.

Das habe ich gemeint.

Und mal ehrlich: In deiner Shell-Extension passiert auch nichts weiter. Du rufst bloß "ShellExecute" zum Starten des Programms auf. Sorry (meine Meinung), aber da hättest du dir den Aufwand sparen können. :stupid:

MathiasSimmack 22. Mai 2004 14:00

Re: Kontextmenü des Explorere ergänzen
 
Ui, und das hier:
Zitat:

Zitat von Luckie
Delphi-Quellcode:
    DeleteRegKey('.jpg\shellext');
    DeleteRegKey('.jpg\shellext\ContextMenuHandlers');

scheint mir auch ziemlich gefährlich. Wenn sich noch ein Programm als Erweiterung für JPEGs einträgt, sind die damit IMHO auch fort. :shock:

Luckie 22. Mai 2004 14:01

Re: Kontextmenü des Explorere ergänzen
 
Also wenn du soll willst könnte ich mein Programm auch in das "Senden an"-Menü packen. Ich wollte es aber mal über das Kontextmenü probieren.

MathiasSimmack 22. Mai 2004 14:04

Re: Kontextmenü des Explorere ergänzen
 
Liegt das irgendwie an mir: :cry:
Habe ich dir was getan?
Mag mich keiner mehr?

:mrgreen:


Wenn du es mit dem von mir genannten Prinzip der Dateiendung machst, dann steckt es doch im Kontextmenü. Was denn noch? Sorry, aber ich muss mal diesen hier machen: :wall:

:zwinker:

Luckie 22. Mai 2004 14:09

Re: Kontextmenü des Explorere ergänzen
 
Ich stehe irgendwie auf dem Schlauch.

Was soll ich in der Registry eintragen? Ginge das dann auch mit einer inf-Datei? Und wenn ja. Wie müsste diese aussehen?

MathiasSimmack 22. Mai 2004 14:15

Re: Kontextmenü des Explorere ergänzen
 
Ich habe schon befürchtet, dass ich mit dir in Quellcode sprechen muss, damit du mich verstehst. :mrgreen: Hier mal das Beispiel für Textdateien.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  reg : TRegistry;
  s  : string;
begin
  reg := TRegistry.Create;
  if(reg <> nil) then
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    s          := '';

    // womit ist der Typ ".txt" verknüpft?
    if(reg.OpenKey('.txt',false)) then
    try
      s := reg.ReadString('');
    finally
      reg.CloseKey;
    end;

    // so, gibt´s da was?
    if(s <> '') and
      (reg.KeyExists(s)) and
    // dann öffnen, ...
      (reg.OpenKey(s + '\shell\ProtonEdit\command',true)) then
    try
    // ... & Proton ergänzen
      reg.WriteString('','"c:\programme\powertoy\proton.exe" "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;
Würdest du jetzt das Kontextmenü einer Textdatei aufrufen, dann siehst du nach wie vor die Einträge "Öffnen", "Drucken", usw. Aber ebenfalls dabei ist jetzt auch "ProtonEdit". Ist zwar kein schöner Begriff für´s Menü, aber es geht ja nur um die Idee.

Schönen Gruß an deine Freundin. Die soll dich nicht so hart ... äh ... ran nehmen ... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.
Seite 2 von 3     12 3      

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