⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 copyhookimpl.pas

📁 详细讲述如何用delphi进行com编程
💻 PAS
字号:
unit CopyHookImpl;

interface

uses
  Windows, ComObj, ShlObj, ShellApi;

type
  TCopyHook = class(TComObject, ICopyHook)
  protected
    {Declare ICopyHook methods here}
    function CopyCallback(Wnd: HWND; wFunc, wFlags: UINT;
      pszSrcFile: PAnsiChar; dwSrcAttribs: DWORD;
      pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT; stdcall;
  end;

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

const
  Class_CopyHook: TGUID = '{9090D650-0ACE-11D3-B3DF-0040F67455FE}';

implementation

uses ComServ;

{ TCopyHook }

function TCopyHook.CopyCallback(Wnd: HWND; wFunc, wFlags: UINT;
  pszSrcFile: PAnsiChar; dwSrcAttribs: DWORD; pszDestFile: PAnsiChar;
  dwDestAttribs: DWORD): UINT;
var
  OpString: string;
begin
  case wFunc of
    FO_MOVE: OpString := ' move ';
    FO_COPY: OpString := ' copy ';
    FO_DELETE: OpString := ' delete ';
    FO_RENAME: OpString := ' rename ';
  end;

  Result := MessageBox(Wnd, PChar('Are you sure you want to ' + OpString +
    pszSrcFile + '?'), 'CopyHookDemo', MB_YESNOCANCEL);
end;

{ TCHClassFactory }

procedure TCHClassFactory.UpdateRegistry(Register: Boolean);
begin
  inherited UpdateRegistry(Register);

  if Register then begin
    CreateRegKey('directory\shellex\CopyHookHandlers\' + ClassName,
      '', GUIDToString(ClassID));
  end else begin
    DeleteRegKey('directory\shellex\CopyHookHandlers\' + ClassName);
  end;
end;

initialization
{$IFDEF VER100}
  TCHClassFactory.Create(ComServer, TCopyHook, Class_CopyHook,
    'CopyHook', '', ciMultiInstance);
{$ELSE}
  TCHClassFactory.Create(ComServer, TCopyHook, Class_CopyHook,
    'CopyHook', '', ciMultiInstance, tmApartment);
{$ENDIF}
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -