Thema: Delphi Programm in einer dll

Einzelnen Beitrag anzeigen

endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#12

Re: Programm in einer dll

  Alt 31. Jul 2004, 13:27
hier mal ein beispiel aus den delphi demos das ich noch
nicht so ganz nachvollziehen kann.

als erstes würde mich einmal interessieren wie sich
folgender wert berechnet

Zitat:
Class_CopyHook: TGUID = '{29F97553-FBD6-11D1-AFC1-00A024D1875C}';
mit hilfe dieses wertes wird dann unter dem schlüssel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Shell Extensions\Approved
ein eintrag angelegt, wozu genau bleibt mir ein rätsel

woher weiß windows nun für welche anwendung die dll geschrieben wurde?
woher bezieht die methode TCopyHook.CopyCallBack die Konstanten/Flags
FO_COPY, F0_DELETE usw. und wie finde ich z.b. nun über die shell
herraus ob sich ein internet explorer fenster geöffnet hat.

ich hab zu all dem wirklich stundenlang im web gewühlt, aber
informationen dazu sind kaum zu finden und ms bietet leider
keinen delphi support

Delphi-Quellcode:
unit CopyHk;

interface

uses
  Windows, ActiveX, ComObj, ShlObj;

type
  TCopyHook = class(TComObject, ICopyHook)
  public
    function CopyCallback(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
      dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT; stdcall;
  end;

const
  Class_CopyHook: TGUID = '{29F97553-FBD6-11D1-AFC1-00A024D1875C}';

implementation

uses ComServ, ShellAPI, SysUtils, Registry;

function TCopyHook.CopyCallBack(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
  dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT;
// This is the method which is called by the shell for folder operations
const
  ConfirmMessage = 'Are you sure you want to %s ''%s''?';
var
  Operation: string;
begin
  case wFunc of
    FO_COPY:
      Operation := 'copy';
    FO_DELETE:
      Operation := 'delete';
    FO_MOVE:
      Operation := 'move';
    FO_RENAME:
      Operation := 'rename';
    else
      Operation := 'continue this operation on'
  end;

  // confirm operation
  Result := MessageBox(Wnd, PChar(Format(ConfirmMessage, [Operation, pszSrcFile])),
    'Delphi CopyHook Shell Extension...' , MB_YESNOCANCEL);
end;

type
  TCopyHookFactory = class(TComObjectFactory)
  public
    procedure UpdateRegistry(Register: Boolean); override;
  end;

procedure TCopyHookFactory.UpdateRegistry(Register: Boolean);
var
  ClassID: string;
begin
  if Register then begin
    inherited UpdateRegistry(Register);

    ClassID := GUIDToString(Class_CopyHook);
    CreateRegKey('Directory\shellex\CopyHookHandlers\DelphiCopyHook', '', ClassID);
    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, 'Delphi CopyHook Shell Extension Example');
        finally
          Free;
        end;
  end
  else begin
    DeleteRegKey('Directory\shellex\CopyHookHandlers\DelphiCopyHook');

    inherited UpdateRegistry(Register);
  end;
end;

initialization
  TCopyHookFactory.Create(ComServer, TCopyHook, Class_CopyHook, '',
    'Delphi CopyHook Shell Extension Example', ciMultiInstance, tmApartment);
end.
  Mit Zitat antworten Zitat