计算机二级DELPHI函数:扩展保护文件夹

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论


  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外壳扩展程序。

  2009年上半年全国计算机等级考试参考答案请进入计算机考试论坛

  2009年全国计算机等级考试报名信息汇总

  2009年NCRE考试有新变化

  2009年全国计算机等级考试大纲

  2009年上半年全国计算机二级考试试题及答案

  2009年上半年全国计算机等级考试试题答案汇总

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答