ICopyHook::CopyCallback

【勇芳软件工作室】汉化HomePreviousNext

[Now Supported on Windows NT]

允许shell移动,复制,删除或重命名文件夹或打印机对象,或禁止shell执行操作。shell调用每个复制钩子处理程序对于文件夹或打印机对象注册(见下面的注释),直到所有处理程序被调用或其中一个返回IDCANCEL为止。

UINT CopyCallback(

HWND 【HWND】,//处理显示UI对象的父窗口
UINT 【wFunc】,//执行操作。
UINT 【wFlags】,//标志控制操作
LPCSTR 【pszSrcFile】,//指向源文件的指针
DWORD 【dwSrcAttribs】,//源文件属性
LPCSTR 【pszDestFile】,//指向目标文件的指针
DWORD 【dwDestAttribs】//目标文件属性
); 

参数

【HWND】

处理程序可能需要显示的任何用户界面元素的复制钩子处理程序应使用的窗口的句柄。如果指定了FOF_SILENT,则该方法应忽略此参数。

【wFunc】

操作执行。此参数可以是以下值之一:

FO_COPY
0x0002
将由【pszSrcFile】指定的文件复制到【pszDestFile】指定的位置。
FO_DELETE
0x0003
删除【pszSrcFile】指定的文件。
FO_MOVE
0x0001
将由【pszSrcFile】指定的文件移动到【pszDestFile】指定的位置。
FO_RENAME
0x0004
重命名由【pszSrcFile】指定的文件。
PO_DELETE
0x0013
删除【pszSrcFile】指定的打印机。
PO_PORTCHANGE
0x0020
更改打印机端口。【pszSrcFile】【pszDestFile】参数包含双空值终止的字符串列表。每个列表包含打印机名称,后跟端口名称。【pszSrcFile】中的端口名称是当前打印机端口,而【pszDestFile】中的端口名称是新的打印机端口。
PO_RENAME
0x0014
重命名由【pszSrcFile】指定的打印机。
PO_REN_PORT
0x0034
PO_RENAME和PO_PORTCHANGE的组合。

【wFlags】

控制操作的标志。此参数可以是以下值的组合:

FOF_ALLOWUNDO
0x0040
保留撤消信息(如有可能)。
FOF_CONFIRMMOUSE
0x0002
未实现。
FOF_FILESONLY
0x0080
未实现。shell仅为文件夹对象而不是文件调用复制钩子处理程序。
FOF_MULTIDESTFILES
0x0001
SHFileOperation函数指定多个目标文件(每个源文件一个),而不是一个目录,其中所有的源文件将被存放。复制钩子处理程序通常忽略此值。
FOF_NOCONFIRMATION
0x0010
对所显示的任何对话框响应“是全部”。
FOF_NOCONFIRMMKDIR
0x0200
如果操作需要创建新的目录,则不会确认创建任何所需的目录。
FOF_RENAMEONCOLLISION
0x0008
当具有目标名称的文件已经存在时,使用新名称进行文件操作,例如“Copy#1 of ...”,复制,移动或重命名操作。
FOF_SILENT
0x0004
不显示进度对话框。
FOF_SIMPLEPROGRESS
0x0100
显示进度对话框,但对话框不显示文件的名称。

【pszSrcFile】

指向包含源文件名称的字符串。

【dwSrcAttribs】

源文件的属性。此参数可以是Windows头文件中定义的任何文件属性标志(FILE_ATTRIBUTE_ *)的组合。

【pszDestFile】

指向包含目标文件名称的字符串。

【dwDestAttribs】

目标文件的属性。此参数可以是Windows头文件中定义的任何文件属性标志(FILE_ATTRIBUTE_ *)的组合。

回报值

返回一个整数值,指示shell是否应该执行该操作。它可以是以下之一:

IDYES

允许操作。

IDNO

防止对此文件的操作,但继续执行任何其他操作(例如,批处理复制操作)。

IDCANCEL

防止当前操作,并取消任何挂起的操作。

注释

你需要注册你的copyhook处理程序。例如,\\ directory copyhook处理程序在HKEY_CLASSES_ROOT \\ directory \\ shellex \\ CopyHookHandlers \\ 【your_copyhook】 \\ {【copyhook CLSID值】}下注册。与外壳扩展相关的其他注册表项为:*,文件夹,驱动器,打印机,未知和AudioCD。

当调用ICopyHook :: CopyCallback时,shell会直接初始化ICopyHook接口,而不先使用IShellExtInitIPersistFile接口。

也可以看看

ICopyHook, SHFileOperation