如题!
解决方案 »
- 链接SQL列名的问题 望老师们给予指导
- 能不能给应用程序分配指定大小的内存空间?在线等。。。。
- delphi数据加密
- 如何根据句柄操作TStringGrid?
- 窗体上的label, button上的caption文字显示‘???’
- Delphi做的C/S软件如何连接网上远程服务器
- 请教个问题:我在delphi里用到了临时表,在sql server 7里,正确,在oracle里不正确.请看源码
- 获取弹出子窗体句柄的API函数?
- 有没有办法自己释放自己, 比如一个button,当我点击button时, button 就free 掉, 不管用那种方法都可以,我现在急需解决类似的问题
- 手机短信息!
- 程序里有哪麼多鬼東西。。。請問。。這有什麼用?
- 简单的问题,但很急!!!!!!
查啦,说写的很烂
ICopyHook。unit CopyMain;interfaceuses Windows, ComObj, ShlObj;type
TCopyHook = class(TComObject, ICopyHook)
protected
function CopyCallback(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT; stdcall;
end; TCopyHookFactory = class(TComObjectFactory)
protected
function GetProgID: string; override;
procedure ApproveShellExtension(Register: Boolean; const ClsID: string);
virtual;
public
procedure UpdateRegistry(Register: Boolean); override;
end;implementationuses ComServ, SysUtils, Registry;{ TCopyHook }// This is the method which is called by the shell for folder operations
function TCopyHook.CopyCallback(Wnd: HWND; wFunc, wFlags: UINT;
pszSrcFile: PAnsiChar; dwSrcAttribs: DWORD; pszDestFile: PAnsiChar;
dwDestAttribs: DWORD): UINT;
const
MyMessage: string = 'Are you sure you want to delete with "%s"?';
begin
// confirm operation
case wFunc of
$3: Result := MessageBox(Wnd, PChar(Format(MyMessage, [pszSrcFile])),
'D4DG Shell Extension', MB_YESNO);
end;
end;{ TCopyHookFactory }function TCopyHookFactory.GetProgID: string;
begin
// ProgID not needed for shell extension
Result := '';
end;procedure TCopyHookFactory.UpdateRegistry(Register: Boolean);
var
ClsID: string;
begin
ClsID := GUIDToString(ClassID);
inherited UpdateRegistry(Register);
ApproveShellExtension(Register, ClsID);
if Register then
// add shell extension clsid to CopyHookHandlers reg entry
CreateRegKey('directory\shellex\CopyHookHandlers\' + ClassName, '',
ClsID)
else
DeleteRegKey('directory\shellex\CopyHookHandlers\' + ClassName);
end;procedure TCopyHookFactory.ApproveShellExtension(Register: Boolean;
const ClsID: string);
// This registry entry is required in order for the extension to
// operate correctly under Windows NT.
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}';initialization
TCopyHookFactory.Create(ComServer, TCopyHook, CLSID_CopyHook,
'D4DG_CopyHook', 'D4DG Copy Hook Shell Extension Example',
ciMultiInstance, tmApartment);
end.
正如前面提到的,安装了复制钩子扩展后,当一个文件夹被复制、删除、移动或重命名时将发出
通知。收到通知后,处理器就可以阻止上述操作。注意,这类处理器仅适用于文件夹或打印机对象,
不适用于文件或其他类型的对象。
要创建一个复制钩子处理器,第一步是创建一个T C o m O b j e c t派生类,并实现I C o p y H o o k接口。这
个接口在S h l O b j单元中是这样声明的:
1.
1. CopyCallback()方法
正如你所看到的, I C o p y H o o k是一个非常简单的接口,它只有一个函数,即C o p y C a l l b a c k ( )。当外
壳文件夹被操作时,这个函数就会被调用。
W n d是一个窗口的句柄,复制钩子处理器以此作为它要显示的窗口的父窗口。w F u n c表明要被执
行的操作。它可以取表2 4 - 5中所列的任一个值。
表24-5 位w F u n c的取值
常量值含义
F O _ C O P Y $ 2 复制由p s z S r c F i l e指定的文件到由p s z D e s t F i l e指定的位置
F O _ D E L E T E $ 3 删除由p s z S r c F i l e指定的文件
F O _ M O V E $ 1 移动由p s z S r c F i l e指定的文件到由p s z D e s t F i l e指定的位置
F O _ R E N A M E $ 4 重命名由p s z S r c F i l e指定的文件
P O _ D E L E T E $ 1 3 删除由p s z S r c F i l e指定的打印机
P O _ P O RT C H A N G E $ 2 0 改变打印机端口。p s z S r c F i l e和p s z D e s t F i l e是两个以n u l l结尾
的字符串,分别用于指定当前的和新的打印机端口名
P O _ R E N A M E $ 1 4 重命名由p s z S r c F i l e指定的打印机
P O _ R E N _ P O RT $ 3 4 P O _ R E N A M E和P O _ P O RT C H A N G E的组合
w F l a g s参数包含操作标志,其取值可以是表2 4 - 6所示值的组合。
表24-6 wFlags的取值
常量值含义
F O F _ A L L O W U N D O $ 4 0 保留U n d o信息
F O F _ M U LT I D E S T F I L E S $ 1 SHFileOperation()用于指定多个目标文件(一个源文
件对应一个),而不是一个所有源文件存放的目录。
复制钩子处理器忽略此值
F O F _ N O C O N F I R M AT I O N $ 1 0 用“Yes to All”影响所有对话框
F O F _ N O C O N F I R M M K D I R $ 2 0 0 如果需要创建一个新的目录,不予确认
F O F _ R E N A M E O N C O L L I S I O N $ 8 如果目标已存在就重命名
F O F _ S I L E N T $ 4 不显示进度对话框
F O F _ S I M P L E P R O G R E S S $ 1 0 0 显示一个进度对话框但不显示文件名
p s z S o u r c e F i l e是源文件夹名, d w S r c A t t r i b s是源文件夹的属性, p s z D e s t F i l e是目标文件夹名,
d w D e s t A t t r i b s是目标文件夹的属性。
与其他方法不同的是,这个接口返回的不是O L E结果代码,而是返回表2 4 - 7中所列的值,这些值
是在Wi n d o w s单元中定义的。
第2 4章扩展Wi n d o w s外壳8 3 3
表24-7 wFlags的值
常量值意义
I D Y E S 6 允许操作
I D N O 7 阻止操作,但其他操作继续
I D C A N C E L 2 阻止当前操作,取消所有未完成的操作
2. 实现T C o p y H o o k
由
8 3 4 第三部分基于组件的开发