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 Shell Extension Menü (https://www.delphipraxis.net/23130-shell-extension-menue.html)

CReber 29. Mai 2004 01:59


Shell Extension Menü
 
Also ich hab grad mal versucht eine Shell Extension zu erstellen und mit einer extra Komponente klappt das auch ;) Nun möchte ich das aber per Hand machen und ich habe mir dazu Luckies DLL inkl. Source genommen... Leider sehe ich absolut net durch ;) Wie krieg ich denn diese GUID raus? Die ist doch dazu da, um die Schnittstelle vom Programm zu geben oder? Sehr kompliziert das ganze ;)

MathiasSimmack 29. Mai 2004 07:25

Re: Shell Extension Menü
 
Die GUID musst du selbst definieren. Du darfst auf keinen Fall eine GUID verwenden, die bereits in einem Programm vorkam. Für jede Shell-Extension muss es eine eigene sein, sonst hast du hinterher ein Problem.

Aber IMHO kannst du dir die meiste Arbeit sparen, wenn du einfach Delphi startest und dann aus dem Menü "Neu -> ActiveX -> ActiveX-Bibliothek" wählst und dann mit "Neu -> ActiveX -> COM-Objekt" ein passendes Objekt erstellst. Das ist der übliche Weg, weil Delphi dabei im Hintergrund die notwendigen Bibliotheken (und auch GUIDs) anlegt.

Dann arbeitest du los und entfernst am Ende nur die Units, die du nicht brauchst. Übrig bleiben in den meisten Fällen nur Windows, ActiveX, ComObj, ComSrv und Classes. Das sollte genügen um die Größe der DLL auf unter 100k zu drücken.

CReber 29. Mai 2004 11:25

Re: Shell Extension Menü
 
Delphi-Quellcode:
procedure TUSBCryptExtFactory.UpdateRegistry(Register: Boolean);
var
  ClassID: string;
  rgHandle: HKEY;
  lpType, cbData: DWORD;
  s: string;
begin
  s := '';
  if RegOpenKeyEx(HKEY_CLASSES_ROOT, '.jpg', 0, KEY_READ, rgHandle) =
    ERROR_SUCCESS then // gibt ein handle zum .jpg Ordner zurück -> rgHandle
  begin
    try
      if RegQueryValueEx(rgHandle, '', nil, @lpType, nil, @cbData) =  // irgendwas wird kopiert
        ERROR_SUCCESS then
      begin
        setlength(s, cbData);  // get s
        RegQueryValueEx(rgHandle, '', nil, nil, @s[1], @cbData);
        setlength(s, cbData - 1);
      end;
    finally
      RegCloseKey(rgHandle);
    end;
  end;
  if Register then
  begin
    inherited UpdateRegistry(Register);
    ClassID := GUIDToString(GUID_USBCRYPT);
    CreateRegKey(s + '\shellex', '', '');
    CreateRegKey(s + '\shellex\ContextMenuHandlers', '', '');
    CreateRegKey(s + '\shellex\ContextMenuHandlers\USBCryptExt', '', ClassID);
  end
  else
  begin
    DeleteRegKey(s + '\shellex\ContextMenuHandlers\USBCryptExt');
    inherited UpdateRegistry(Register);
  end;
end;
könnte mir jemand diesen code in pseudocode erklären? oben wird s ausgelesen und dann wird unten die GUID eingetragen das ist ja relativ verständlich (wenn es denn so ist)... was für mich aber im moment überhaupt nicht verständlich ist

bei .jpg kommt der auf s = CLSID/OISjpegfile/shellex/ContextMenuHandlers

Ich würde das gerne in * eintragen ;)

CReber 29. Mai 2004 13:29

Re: Shell Extension Menü
 
bäh ich komm nich weiter heul :( ich schau mir schon 3 h die demos an und suche lauter quellcode zeugs aber ich kriegs net gebacken das ordentlich in die registry einzutragen :(


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