wyx5 发表于 2009-2-24 15:15:49

关于调用系统复制文件框的问题

关于调用系统复制文件框的问题.
我发现不能使用中文或者过长的路径,好象是出在 Char这里了,使用了几个如 intlong 等,也都不对,又不知道用何替代,请各位指点一下
_fileCopy("d:\system\系统.iso", "c:\drivers\系统.iso")

Func _filecopy($source, $dest)

    Local $SHFILEOPSTRUCT, $source_struct, $dest_struct
       
    $SHFILEOPSTRUCT = DllStructCreate("hwnd hWnd;uint wFunc;ptr pFrom;ptr pTo;int fFlags;int fAnyOperationsAborted;ptr hNameMappings;ptr lpszProgressTitle")

    $source_struct = DllStructCreate("char[" & StringLen($source) + 2 & "]")
    DllStructSetData($source_struct, 1, $source)
    DllStructSetData($source_struct, 1, 0, StringLen($source) + 2)
   $dest_struct = DllStructCreate("char[" & StringLen($dest) + 2 & "]")
    DllStructSetData($dest_struct, 1, $dest)
    DllStructSetData($dest_struct, 1, 0, StringLen($dest) + 2)
   DllStructSetData($SHFILEOPSTRUCT, "hWnd", 0)
    DllStructSetData($SHFILEOPSTRUCT, "wFunc", 0x0002)
    DllStructSetData($SHFILEOPSTRUCT, "pFrom", DllStructGetPtr($source_struct))
    DllStructSetData($SHFILEOPSTRUCT, "pTo", DllStructGetPtr($dest_struct))
    DllStructSetData($SHFILEOPSTRUCT, "fFlags",0x0010)
    DllCall("shell32.dll", "int", "SHFileOperation", "ptr", DllStructGetPtr($SHFILEOPSTRUCT))
EndFunc

[ 本帖最后由 wyx5 于 2009-2-24 16:20 编辑 ]

pusofalse 发表于 2009-2-24 20:15:28

之所以长度加2的原因是要兼容宽字符~
仔细看下哪个类型是宽字符吧~就在DllStructCreate帮助里面。

wyx5 发表于 2009-2-25 09:16:40

原帖由 pusofalse 于 2009-2-24 20:15 发表 http://www.autoitx.com/images/common/back.gif
之所以长度加2的原因是要兼容宽字符~
仔细看下哪个类型是宽字符吧~就在DllStructCreate帮助里面。


好象不是这个原因啊,如果我把 系统.ISO改成 英文或者数字的文件名,路径不是很长的话,就可以复制的.

pusofalse 发表于 2009-2-25 09:58:33

除了char要改为wchar外,函数也调用错了。。。- -||| SHFileOperationW
另外DllStructSetData($source_struct, 1, 0, StringLen($source) + 2)两句是多余的吧?~

wyx5 发表于 2009-2-25 11:23:34

原帖由 pusofalse 于 2009-2-25 09:58 发表 http://www.autoitx.com/images/common/back.gif
除了char要改为wchar外,函数也调用错了。。。- -||| SHFileOperationW
另外DllStructSetData($source_struct, 1, 0, StringLen($source) + 2)两句是多余的吧?~

不多余啊!你编译下看看就知道了~~
麻烦大家帮帮忙啊!!!!!!
页: [1]
查看完整版本: 关于调用系统复制文件框的问题