📄 copyhookimpl.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 + -