计算机等级考试二级Delphi辅导知识:扩展保护文件夹_第2页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2011年11月10日
 function TCopyHook.CopyCallback(Wnd: HWND; wFunc, wFlags: UINT;
  pszSrcFile: PAnsiChar; dwSrcAttribs: DWORD; pszDestFile: PAnsiChar;
  dwDestAttribs: DWORD): UINT;
  const
  FO_COPY = 2;
  FO_DELETE = 3;
  FO_MOVE = 1;
  FO_RENAME = 4;
  var
  sOp:string;
  begin
  Case wFunc of
  FO_COPY: sOp:=format(\'你确定要将 %s 拷贝到 %s 吗?\',[pszSrcFile,pszDestFile]);
  FO_DELETE: sOp:=format(\'你确定要将 %s 删除吗?\',[pszSrcFile]);
  FO_MOVE: sOp:=format(\'你确定要将 %s 转移到 %s 吗?\',[pszSrcFile,pszDestFile]);
  FO_RENAME: sOp:=format(\'你确定要将 %s 重命名为 %s 吗?\',[pszSrcFile,pszDestFile]);
  else
  sOp:=format(\'无法识别的操作代码 %d\',[wFlags]);
  end;
  // 提示,让用户决定是否执行操作
  Result := MessageBox(Wnd, PChar(sOp),
  \'文件挂钩演示\', MB_YESNOCANCEL);
  end;
  { TCopyHookFactory }
  function TCopyHookFactory.GetProgID: string;
  begin
  Result := \';
  end;
  procedure TCopyHookFactory.UpdateRegistry(Register: Boolean);
  var
  ClsID: string;
  begin
  ClsID := GUIDToString(ClassID);
  inherited UpdateRegistry(Register);
  ApproveShellExtension(Register, ClsID);
  if Register then
  file://将clsid 加入到注册表的CopyHookHandlers中
  CreateRegKey(\'directory\\shellex\\CopyHookHandlers\\\' + ClassName, \',
  ClsID)
  else
  DeleteRegKey(\'directory\\shellex\\CopyHookHandlers\\\' + ClassName);
  end;
  procedure TCopyHookFactory.ApproveShellExtension(Register: Boolean;
  const ClsID: string);
  const
  SApproveKey = \'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved\';
  begin
  with TRegistry.Create do
  try
  RootKey := HKEY_LOCAL_MACHINE;
  if not OpenKey(SApproveKey, True) then Exit;
  if Register then WriteString(ClsID, Description)
  else DeleteValue(ClsID);
  finally
  Free;
  end;
  end;
  const
  CLSID_CopyHook: TGUID = \'{66CD5F60-A044-11D0-A9BF-00A024E3867F}\';
  LIBID_CopyHook: TGUID = \'{D2F531A0-0861-11D2-AE5C-74640BC10000}\';
  initialization
  TCopyHookFactory.Create(ComServer, TCopyHook, CLSID_CopyHook,
  \'CR_CopyHook\', \'文件操作挂钩演示\',ciMultiInstance, tmApartment);
  end.
  将文件保存为CopyMain.Pas文件,然后编译程序为CopyHook.Dll文件,然后注册CopyHook.Dll文件,你可以使用Windows提供的RegSvr32.exe来注册,注册的方法是在Dos窗口中进入Windows的System子目录,然后在其中输入Regsvr32 x:\\xxx\\xxx\\copyhook.dll ,其中x:\\xxx\\xxx\\是编译的CopyHook.dll所在的全路径名。也可以在Run菜单中选择Register ActiveX Server来注册。
  当文件注册成功之后,在Windows的Explore中任意改变一个文件夹的名字或者移动一个目录,就会有一个提示框弹出,提示用户是否确定执行操作。
  按“是”将执行文件夹操作,按“否”或者“取消”将取消相应的文件夹操作。
  上面介绍的只是Delphi实现Windows外壳扩展的一种,参照上面的程序和Delphi关于Windows的COM组件模型的编程,就可以编写出十分专业化的Windows外壳扩展程序。
首页 1 2 尾页

相关文章