; 应bing614兄的邀请,将几个具有代表性的API函数讲解贴上来,希望可以方便其他朋友。
第一讲 - CopyFile
调用API CopyFile 复制文件,定义于Kernel32.dll。其函数原型如下:
BOOL WINAPI CopyFile(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName,
__in BOOL bFailIfExists
);
头部的BOOL 说明CopyFile的返回值为布尔值,只有复制成功或复制失败。BOOL类型对应au3中的int型。
第一个参数lpExistingFileName,指定要复制的文件,LPCTSTR为参数类型,对应于Au3中的str。
第二个参数lpNewFileName, 指定新文件名,参数同样对应于AU3中的str。若此参数指定为某文件夹路径而非某文件名,函数将执行失败,错误值将设为5(拒绝访问)。
第三个参数bFailIfExists, 指定一个BOOL值(真或假),用于说明是否覆盖已经存在的文件。真为覆盖,假为不覆盖。
如果新文件已经存在,并且bFailIfExists指定为False,函数则执行失败。如果新文件不存在,则CopyFile函数忽略这个参数。如果函数最终返回0(假),说明函数执行失败。调用GetLastError(定义于Kernel32.dll中)返回其扩展的错误值。
在au3中应用如下,注意API名称区分大小写:; 复制系统文件夹中的cmd.exe到当前文件所在的目录,并把新文件命名为cmd1.exe。
; CopyFile - http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx
$iResult = DllCall("Kernel32.dll", "int", "CopyFile", _
"str", @SystemDir & "\cmd.exe", _
"str", @ScriptDir & "\cmd1.exe", "int", 1)
If $iResult[0] <> 0 Then
Msgbox(0, "", "复制成功")
Else
$iError = DllCall("Kernel32.dll", "long", "GetLastError")
Msgbox(0, "", "失败,错误代码" & $iError[0])
EndIf
由CopyFile这个API函数,你想到了AU3中的哪个函数? -- FileCopy
当然在au3中,复制文件可以直接调用内置函数FileCopy,大可不必这么繁琐地调用DLL。这一讲目的只是对系统API函数有一个非常初级的认识。
扩展练习 -- 调用API MoveFile 实现移动文件。 |