[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接口,而不先使用IShellExtInit或IPersistFile接口。
也可以看看