FindFirstVolume

 #cs========================================================================================
FindFirstVolume 功能：查找主机中的第一个驱动器，返回查找句柄

函数原型：
HANDLE WINAPI FindFirstVolume(
__out LPTSTR lpszVolumeName,
__in DWORD cchBufferLength
);

参数：
lpszVolumeName [out]
指向一个缓冲区接收以null结尾的字符串，它找到第一个卷GUID路径

cchBufferLength [in]
要接收的卷 GUID 的路径，在 TCHARs 中的缓冲区的长度

返回值：
如果函数成功，则返回值是 FindNextVolume 和 FindVolumeClose 功能的后续调用中使用的搜索句柄。
如果该函数未能找到任何卷，返回值是 INVALID_HANDLE_VALUE 错误代码。
若要获取扩展的错误的信息，请使用 GetLastError 函数
#ce========================================================================================

;示例：返回盘符和设备名
$Kernel32 = DllOpen("Kernel32.dll")
$Drive = DllCall($Kernel32,"dword","GetLogicalDrives")

$dStr = ""
For $i = 0 To -23 Step -1
If BitAND($Drive[0],BitShift(1,$i)) Then $dStr &= Chr(Abs($i)+97)
Next

$F = DllCall($Kernel32,"handle","FindFirstVolume","str","","dword",256)
MsgBox(64,StringLeft($dStr,1)&"盘","驱动器设备名:"&@CRLF&$F[1]) ;查找到的第一个卷

For $j = 2 To StringLen($dStr)
$d = DllCall($Kernel32,"bool","FindNextVolume","handle",$F[0],"str","","dword",256)
MsgBox(64,StringMid($dStr,$j,1)&"盘","驱动器设备名:"&@CRLF&$d[2])
Next

DllCall($Kernel32,"bool","FindVolumeClose","handle",$F[0]) ;关闭句柄
DllClose($Kernel32)


FindNextVolume

 #cs========================================================================================
FindNextVolume 功能：根据FindFirstVolume返回的句柄，查找主机中后继的逻辑驱动器

函数原型：
BOOL WINAPI FindNextVolume(
__in HANDLE hFindVolume,
__out LPTSTR lpszVolumeName,
__in DWORD cchBufferLength
);

参数：
hFindVolume [in]
FindFirstVolume 函数返回的搜索句柄

lpszVolumeName [out]
接收找到的卷 GUID 的路径字符串指针

cchBufferLength [in]
要接收的卷 GUID 的路径，在 TCHARs 中的缓冲区的长度

返回值：
如果函数成功，则返回一个非零值。
如果函数失败，则返回值为零。
若要获取扩展的错误的信息，请使用 GetLastError 函数
如果找不到匹配的文件，则 GetLastError 函数就会返回 ERROR_NO_MORE_FILES 错误代码。
在这种情况下，关闭搜索使用 FindVolumeClose 函数
#ce========================================================================================

;示例：返回设备名
#include <Array.au3>
Const $ERROR_NO_MORE_FILES = 0x12
Dim $aVolume[256] ;用来保存卷,$aVolume[0]保存驱动器的个数
$Kernel32 = DllOpen("Kernel32.dll")
$F = DllCall($Kernel32,"handle","FindFirstVolume","str","","dword",256)
$aVolume[1] = $F[1] ;找到的第一个驱动器设备名

Dim $s = 1
While 1
$Find = DllCall($Kernel32,"bool","FindNextVolume","handle",$F[0],"str","","dword",256)
$LastErr = DllCall($Kernel32,"dword","GetLastError")
If $LastErr[0] = $ERROR_NO_MORE_FILES Then ExitLoop
$s += 1
$aVolume[$s] = $Find[2]
WEnd

DllCall($Kernel32,"bool","FindVolumeClose","handle",$F[0]) ;关闭句柄
DllClose($Kernel32)

$aVolume[0] = $s ;0号元素保存数量
ReDim $aVolume[$s+1]
_ArrayDisplay($aVolume)


FindVolumeClose

 #cs========================================================================================
FindVolumeClose 功能：关闭驱动器查找句柄

函数原型：
BOOL WINAPI FindVolumeClose(
__in HANDLE hFindVolume
);

参数：
hFindVolume [in]
FindFirstVolume 函数返回的搜索句柄

返回值：
如果函数成功，则返回一个非零值。
如果函数失败，则返回值为零。
若要获取扩展的错误的信息，请使用 GetLastError 函数
#ce========================================================================================

;示例：返回设备名
#include <Array.au3>
Const $ERROR_NO_MORE_FILES = 0x12
Dim $aVolume[256] ;用来保存卷,$aVolume[0]保存驱动器的个数
$Kernel32 = DllOpen("Kernel32.dll")
$F = DllCall($Kernel32,"handle","FindFirstVolume","str","","dword",256)
$aVolume[1] = $F[1] ;找到的第一个驱动器设备名

Dim $s = 1
While 1
$Find = DllCall($Kernel32,"bool","FindNextVolume","handle",$F[0],"str","","dword",256)
$LastErr = DllCall($Kernel32,"dword","GetLastError")
If $LastErr[0] = $ERROR_NO_MORE_FILES Then ExitLoop
$s += 1
$aVolume[$s] = $Find[2]
WEnd

DllCall($Kernel32,"bool","FindVolumeClose","handle",$F[0]) ;关闭句柄
DllClose($Kernel32)

$aVolume[0] = $s ;0号元素保存数量
ReDim $aVolume[$s+1]
_ArrayDisplay($aVolume)


GetDiskFreeSpace

 #cs========================================================================================
GetDiskFreeSpace 功能：获取与一个磁盘的组织有关的信息，以及了解剩余空间的容量

函数原型：
BOOL WINAPI GetDiskFreeSpace(
__in LPCTSTR lpRootPathName,
__out LPDWORD lpSectorsPerCluster,
__out LPDWORD lpBytesPerSector,
__out LPDWORD lpNumberOfFreeClusters,
__out LPDWORD lpTotalNumberOfClusters
);

参数：
lpRootPathName [in]
要返回其信息的磁盘的根目录。如果此参数为 NULL，则该函数将使用当前磁盘的根目录。

lpSectorsPerCluster [out]
用于装载一个簇内扇区数的变量

lpBytesPerSector [out]
用于装载一个扇区内字节数的变量

lpNumberOfFreeClusters [out]
用于装载磁盘上剩余簇数的变量

lpTotalNumberOfClusters [out]
用于装载磁盘上总簇数的变量

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================

#include <Array.au3>
$iSpace = DllCall("Kernel32.dll","bool","GetDiskFreeSpace","str","d:\","dword*",0,"dword*",0,"dword*",0,"dword*",0)
_ArrayDisplay($iSpace)


GetDiskFreeSpaceEx

 #cs========================================================================================
GetDiskFreeSpaceEx 功能：获取用户可用的空闲空间的字节数、磁盘总容量的字节数

函数原型：
BOOL WINAPI GetDiskFreeSpaceEx(
__in_opt LPCTSTR lpDirectoryName,
__out_opt PULARGE_INTEGER lpFreeBytesAvailable,
__out_opt PULARGE_INTEGER lpTotalNumberOfBytes,
__out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

参数：
lpDirectoryName [in, optional]
在磁盘上的目录。如果此参数为 NULL，则该函数将使用当前磁盘的根目录。
该函数接受任何磁盘上的目录。调用应用程序必须具有 FILE_LIST_DIRECTORY 此目录的访问权限。

lpFreeBytesAvailable [out, optional]
指针，指向用于存储可获得的总字节数量的变量。

lpTotalNumberOfBytes [out, optional]
指针，指向存储磁盘空间总字节数据的变量

lpTotalNumberOfFreeBytes [out, optional]
指针，指向存储磁盘空闲空间总字节的变量

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================

$iSpace = DllCall("Kernel32.dll","bool","GetDiskFreeSpaceEx","str","d:\","UINT64*",0,"UINT64*",0,"UINT64*",0) ;UINT64 64位无符号整型数据
MsgBox(64,"结果","D盘总容量："&$iSpace[3]&"字节"&@CRLF&"D盘可用空间："&$iSpace[4]&"字节")


GetDriveType

 #cs========================================================================================
GetDriveType 功能：获取驱动器类型

函数原型：
UINT WINAPI GetDriveType(
__in_opt LPCTSTR lpRootPathName
);

参数：
lpRootPathName [in, optional]
驱动器的根目录。尾部反斜杠是必需的。
如果此参数为 NULL，则该函数将使用当前目录的根目录。

返回值：
返回指定驱动器类型，可以是以下值之一：
DRIVE_UNKNOWN = 0 无法确定驱动器类型
DRIVE_NO_ROOT_DIR = 1 根路径是无效的 ；例如，没有安装在指定的路径的卷。
DRIVE_REMOVABLE = 2 可移动驱动器，例如:软盘驱动器，闪存卡
DRIVE_FIXED = 3 固定磁盘，硬盘
DRIVE_REMOTE = 4 网络驱动器
DRIVE_CDROM = 5 光驱
DRIVE_RAMDISK = 6 RAM磁盘驱动器
#ce========================================================================================

;示例：检测可移动磁盘usb
$Drive = DllCall("Kernel32.dll","dword","GetLogicalDriveStrings","dword",256,"str","")
;$Drive[0]返回需要的长度
$str = DllStructCreate("char var["&$Drive[0]&"]")
$lpbuffer = DllStructGetPtr($str) ;autoit遇到null字符认为字符串结束，所以要创建一个结构
DllCall("Kernel32.dll","dword","GetLogicalDriveStrings","dword",$Drive[0],"ptr",$lpbuffer)

$string = ""
For $i = 1 To $Drive[0]
$sDrive = DllStructGetData($str,"var",$i)
If $sDrive = "" Then $sDrive = " " ;如果是null字符则改为空格
$string &= $sDrive
Next

$sp = StringSplit(StringStripWS($string,2)," ")

For $j = 1 To $sp[0]
$type = DllCall("Kernel32.dll","uint","GetDriveType","str",$sp[$j]) ;检测驱动器类型
If $type[0] = 2 Then MsgBox(64,"提示","存在可移动磁盘"&$sp[$j]) ;2是可移动磁盘
Next


GetLogicalDrives

 #cs========================================================================================
GetLogicalDrives 功能：获取主机中所有的逻辑驱动器，以Bit Map的形式返回

函数原型：DWORD WINAPI GetLogicalDrives(void);

参数：无

返回值：
如果函数成功，则返回值是一个二进制位掩码，表示当前可用的磁盘驱动器。
其中，位0设为1表示驱动器A:存在于系统中；位1设为1表示存在B:驱动器；以次类推
#ce========================================================================================

;示例:获取所有逻辑驱动器，并显示盘符
$Drive = DllCall("Kernel32.dll","dword","GetLogicalDrives")

For $i = 0 To -23 Step -1
If BitAND($Drive[0],BitShift(1,$i)) Then MsgBox(0,"",Chr(Abs($i)+97)) ;_WinAPI_LongMid($Drive[0],0,1) 取第一位
Next


GetLogicalDriveStrings

 #cs========================================================================================
GetLogicalDriveStrings 功能：获取主机中所有的逻辑驱动器，以驱动器根路径字符串返回

函数原型：
DWORD WINAPI GetLogicalDriveStrings(
__in DWORD nBufferLength,
__out LPTSTR lpBuffer
);

参数：
nBufferLength [in]
指向 lpBuffer，TCHARs 中的缓冲区的最大大小。此大小不包括终止空字符
如果此参数为零，则不会使用 lpBuffer。

lpBuffer [out]
指向接收一系列的 null 结尾的字符串，另一个用于每个有效的驱动器在系统中，再加上附加的 null 字符的缓冲区的指针。
每个字符串是一个设备的名称。

返回值：
如果函数成功，则返回值是的长度以字符复制到缓冲区，不包括终止 null 字符的字符串。
请注意一个 ASCII ANSI null 字符使用一个字节，但 Unicode null 字符使用两个字节
如果函数失败，则返回值为零。
若要获取扩展的错误的信息，请使用 GetLastError 函数
#ce========================================================================================

;示例：检测可移动磁盘usb
$Drive = DllCall("Kernel32.dll","dword","GetLogicalDriveStrings","dword",256,"str","")
;$Drive[0]返回需要的长度
$str = DllStructCreate("char var["&$Drive[0]&"]")
$lpbuffer = DllStructGetPtr($str) ;autoit遇到null字符认为字符串结束，所以要创建一个结构
DllCall("Kernel32.dll","dword","GetLogicalDriveStrings","dword",$Drive[0],"ptr",$lpbuffer)

$string = ""
For $i = 1 To $Drive[0]
$sDrive = DllStructGetData($str,"var",$i)
If $sDrive = "" Then $sDrive = " " ;如果是null字符则改为空格
$string &= $sDrive
Next

$sp = StringSplit(StringStripWS($string,2)," ")

For $j = 1 To $sp[0]
$type = DllCall("Kernel32.dll","uint","GetDriveType","str",$sp[$j]) ;检测驱动器类型
If $type[0] = 2 Then MsgBox(64,"提示","存在可移动磁盘"&$sp[$j]) ;2是可移动磁盘
Next


GetVolumeInformation

 #cs========================================================================================
GetVolumeInformation 功能：检索与指定的根目录相关联的卷和文件系统信息。

函数原型：
BOOL WINAPI GetVolumeInformation(
__in_opt LPCTSTR lpRootPathName,
__out LPTSTR lpVolumeNameBuffer,
__in DWORD nVolumeNameSize,
__out_opt LPDWORD lpVolumeSerialNumber,
__out_opt LPDWORD lpMaximumComponentLength,
__out_opt LPDWORD lpFileSystemFlags,
__out LPTSTR lpFileSystemNameBuffer,
__in DWORD nFileSystemNameSize
);

参数：
lpRootPathName [in, optional]
欲获取信息的那个卷的根路径

lpVolumeNameBuffer [out]
指向接收指定的卷的名称的缓冲区的指针。
最大缓冲区大小为 MAX_PATH + 1

nVolumeNameSize [in]
TCHARs 中卷名称缓冲区的长度。TCHARs 中卷名称缓冲区的长度。
如果不提供卷名称缓冲区，则忽略此参数。

lpVolumeSerialNumber [out, optional]
指向接收卷序列号的变量的指针。如果不需要序列号，则此参数可以是 NULL。
此函数返回时，格式化的硬盘，操作系统分配的卷序列号
若要以编程方式获取制造商分配的硬盘序列号，请使用 Windows 管理规范 (WMI) Win32_PhysicalMedia 属性 SerialNumber。

lpMaximumComponentLength [out, optional]
指定一个变量，用于装载文件名每一部分的长度。例如，在“c:\component1\component2.ext”的情况下，
它就代表component1或component2名称的长度

lpFileSystemFlags [out, optional]
用于装载一个或多个二进制位标志的变量。对这些标志位的解释如下:
FS_CASE_IS_PRESERVED 文件名的大小写记录于文件系统
     FS_CASE_SENSITIVE 文件名要区分大小写
     FS_UNICODE_STORED_ON_DISK 文件名保存为Unicode格式
     FS_PERSISTANT_ACLS 文件系统支持文件的访问控制列表（ACL）安全机制
     FS_FILE_COMPRESSION 文件系统支持逐文件的进行文件压缩
     FS_VOL_IS_COMPRESSED 整个磁盘卷都是压缩的

lpFileSystemNameBuffer [out]
指向接收的文件系统名称的缓冲区的指针，例如，FAT 文件系统或 NTFS 文件系统
最大缓冲区大小为 MAX_PATH + 1

nFileSystemNameSize [in]
文件系统名称缓冲区，在 TCHARs 中的长度
最大缓冲区大小为 MAX_PATH + 1。
如果未提供文件系统名称缓冲区，则忽略此参数

返回值：
如果检索所有请求的信息，则返回值为非零值。
如果不检索所有请求的信息，则返回值为零
若要获取扩展的错误的信息，请致电 GetLastError。
#ce========================================================================================

;示例：查询c盘，文件系统和驱动器序列号

$DriveInformation = DllCall("Kernel32.dll","bool","GetVolumeInformation","str","c:\","str","","dword",256, _
"dword*",0,"dword*",0,"dword*",0,"str","","dword",256)
MsgBox(64,"结果","驱动器"&$DriveInformation[1]&"序列号:"&$DriveInformation[4]&",文件系统:"&$DriveInformation[7])


CopyFile

 #cs========================================================================================
CopyFile 功能：复制一个存在的文件到新文件

函数原型：
BOOL WINAPI CopyFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName,
_In_ BOOL bFailIfExists
);

参数：
lpExistingFileName [in]
存在的文件名
如果找不到文件，GetLastError 返回 ERROR_FILE_NOT_FOUND.

lpNewFileName [in]
新文件名

bFailIfExists [in]
如果此参数为 TRUE，并由指定的新文件 lpNewFileName 已经存在，则操作失败
如果此参数为 FALSE，并且新的文件已经存在，该函数将覆盖现有的文件，并成功。

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================

;复制c:\a.txt到d:\并改名为b.txt,如果存在b.txt，则删除
$Copy = DllCall("Kernel32.dll","bool","CopyFile","str","c:\a.txt","str","d:\b.txt","bool",False)
If $Copy[0] Then MsgBox(64,"提示","复制成功！")


CreateDirectory

 #cs========================================================================================
CreateDirectory 功能：创建一个新目录。

函数原型：
BOOL WINAPI CreateDirectory(
__in LPCTSTR lpPathName,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

参数：
lpPathName [in]
要创建的目录的路径。有 248 个字符的路径的默认字符串大小的限制。

lpSecurityAttributes [in, optional]
SECURITY_ATTRIBUTES 结构的指针。
结构的 lpSecurityDescriptor 成员指定的新目录的安全描述符。
如果 lpSecurityAttributes 为 NULL，则目录获取默认的安全描述符。

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。

ERROR_ALREADY_EXISTS 指定的目录已经存在。
ERROR_PATH_NOT_FOUND 一个或多个中间目录不存在 ；
#ce========================================================================================

;示例
$bool = DllCall("Kernel32.dll","bool","CreateDirectory","str","d:\测试目录","ptr",0)
If $bool[0] Then MsgBox(64,"提示","目录创建成功")


CreateFile

 #cs========================================================================================
CreateFile 功能：新建或打开一个文件，获取文件句柄

函数原型：
HANDLE WINAPI CreateFile(
__in LPCTSTR lpFileName,
__in DWORD dwDesiredAccess,
__in DWORD dwShareMode,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__in DWORD dwCreationDisposition,
__in DWORD dwFlagsAndAttributes,
__in_opt HANDLE hTemplateFile
);

参数：
lpFileName [in]
文件或创建或打开设备的名称。

dwDesiredAccess [in]
文件的访问权限。最常用的值是 GENERIC_READ、 GENERIC_WRITE，或者两者都 (GENERIC_READ |GENERIC_WRITE）。

dwShareMode [in]
共享模式。指明与其他进程是否共享该文件，可以是共享读
(FILE_SHARE DELETE)、共享写(FILE_SHARE_WRITE)、共享删除(FILE_SHARE．READ)，如果
要指明多个属性，使用“位与～‘I”运算。如果指明上述参数，其他进程就可以对文件进
行相关操作。如果本进程需要独占本文件，则将本参数设置为 0。

lpSecurityAttributes [in, optional]
指向 SECURITY_ATTRIBUTES 结构的指针，表示本文件句柄的安
全属性，能影响其是否可被子进程继承等操作。如果设定为 NULL，则子进程不可继承本句
柄。SECURITY ATTRIBUTES 结构不常用，对此数据结构的设置，涉及 Windows 系统中对权限
管理的原理

dwCreationDisposition [in]
操作模式:
CREATE_NEW = 1 新建文件，如果文件已经存在则失败，错误码ERROR_FILE_EXISTS (80)。
CREATE_ALWAYS = 2 如查指向的文件存在，则重建文件，清除文件内容，清除文件属性;如果文件不存则新建一个
OPEN_EXISTING = 3 打开存在的文件
OPEN_ALWAYS = 4 如果文件存在，则打开文件。如果文件不存在则等同于CREATE_NEW
TRUNCATE_EXISTING = 5 打开已存在文件，并把文件内容清空，文件大小变为零

dwFlagsAndAttributes [in]
文件属性和文件标志：
FILE_ATTRIBUTE_ARCHIVE 标记归档属性
     FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩，或者标记为文件在目录中的默认压缩方式
     FILE_ATTRIBUTE_NORMAL 默认属性
     FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录
     FILE_ATTRIBUTE_READONLY 文件为只读
     FILE_ATTRIBUTE_SYSTEM 文件为系统文件
     FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作
     FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作
     FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块
     FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化
     FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化
     FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后，将文件删除。特别适合临时文件

hTemplateFile [in, optional]
输入参数，当存取权限包括 GENERIC_WRITE 时，可以设置为一个模板
文件的句柄。一般情况下，可设置为 NULL，表示不使用模板文件

返回值：
返回HANDLE 数据类型值，表示文件的句柄，如果返回 INVALID_HANDLE_VALUE，表
示操作失败。
#ce========================================================================================

Const $GENERIC_READ = 0x80000000
Const $GENERIC_WRITE = 0x40000000
Const $RW = BitOR($GENERIC_READ,$GENERIC_WRITE)
Const $CREATE_ALWAYS = 2
Const $FILE_ATTRIBUTE_NORMAL = 0x80
Const $INVALID_HANDLE_VALUE = -1
$hFile = DllCall("Kernel32.dll","handle","CreateFile","str","test.txt","dword",$RW,"dword",0, _
"ptr",0,"dword",$CREATE_ALWAYS,"dword",$FILE_ATTRIBUTE_NORMAL,"handle",0)
If $hFile[0] = $INVALID_HANDLE_VALUE Then Exit MsgBox(16,"错误","打开失败")

;写入数据
DllCall("Kernel32.dll","bool","WriteFile","handle",$hFile[0],"str","你好","dword",4,"dword*",0,"ptr",0)
;关闭句柄
DllCall("Kernel32.dll","bool","CloseHandle","handle",$hFile[0])


DeleteFile

 #cs========================================================================================
DeleteFile 功能：删除一个存在的文件

函数原型：
BOOL WINAPI DeleteFile(
__in LPCTSTR lpFileName
);

参数：
lpFileName [in]
删除的文件名

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================

$Del = DllCall("Kernel32.dll","bool","DeleteFile","str","a.txt")
If $Del[0] Then MsgBox(64,"提示","删除a.txt成功")


FindFirstFile

 #cs========================================================================================
FindFirstFile 功能：查找第一个目录或文件，获取查找句柄

函数原型：
HANDLE WINAPI FindFirstFile(
__in LPCTSTR lpFileName,
__out LPWIN32_FIND_DATA lpFindFileData
);

参数：
lpFileName [in]
目录或路径和文件名称，其中可以包含通配符字符

lpFindFileData [out]
输出参数，指向 WIN32_FIND_DATA 结构的指针，为找到的文件及其若
干属性信息。

返回值：
如果函数成功，则返回值是 FindNextFile 或 FindClose，
随后调用中使用的搜索句柄和 lpFindFileData 参数包含的第一个文件或目录发现有关的信息。
如果函数失败，或未能在 lpFileName 参数中找到的搜索字符串的文件，
则返回值是 INVALID_HANDLE_VALUE 和 lpFindFileData 的内容是不确定
如果函数失败，因为可以找到不匹配的文件，则 GetLastError 函数返回 ERROR_FILE_NOT_FOUND。
#ce========================================================================================

;示例，查找d盘下的文件和目录，没有包括子目录(如有需要使用递归法查找)

$LPWIN32_FIND_DATA = DllStructCreate( _
"DWORD dwFileAttributes;"& _
"Dword ftCreationTime[2];" & _
"Dword ftLastAccessTime[2];" & _
"Dword ftLastWriteTime[2];" & _
"DWORD nFileSizeHigh;"& _
"DWORD nFileSizeLow;"& _
"DWORD dwReserved0;"& _
"DWORD dwReserved1;"& _
"CHAR cFileName[260];"& _
"CHAR cAlternateFileName[14];") ;创建结构
$fData = DllStructGetPtr($LPWIN32_FIND_DATA) ;获取结构指针

$Kernel32 = DllOpen("Kernel32.dll")
$File = FileOpen("File.txt",9)
$fFile = DllCall($Kernel32,"handle","FindFirstFile","str","d:\*","ptr",$fData)
FileWriteLine($File,DllStructGetData($LPWIN32_FIND_DATA,"cFileName")) ;找到的第一个文件名写入到File.txt
While 1
$bool = DllCall($Kernel32,"bool","FindNextFile","handle",$fFile[0],"ptr",$fData)
If $bool[0] = 0 Then ExitLoop
FileWriteLine($File,DllStructGetData($LPWIN32_FIND_DATA,"cFileName"))
WEnd

DllCall($Kernel32,"bool","FindClose","handle",$fFile[0]) ;关闭搜索句柄
FileClose($File)
DllClose($Kernel32)


FindNextFile

 #cs========================================================================================
FindNextFile 功能：对文件、文件夹进行循环查找

函数原型：
BOOL WINAPI FindNextFile(
__in HANDLE hFindFile,
__out LPWIN32_FIND_DATA lpFindFileData
);

参数：
hFindFile [in]
搜索的句柄

lpFindFileData [out]
输出参数，指向 WIN32_FIND_DATA 结构的指针，为找到的文件及其若
干属性信息。

返回值：
返回 BOOL 值，表示是否成功
#ce========================================================================================

;示例，查找d盘下的文件和目录，没有包括子目录(如有需要使用递归法查找)

$LPWIN32_FIND_DATA = DllStructCreate( _
"DWORD dwFileAttributes;"& _
"Dword ftCreationTime[2];" & _
"Dword ftLastAccessTime[2];" & _
"Dword ftLastWriteTime[2];" & _
"DWORD nFileSizeHigh;"& _
"DWORD nFileSizeLow;"& _
"DWORD dwReserved0;"& _
"DWORD dwReserved1;"& _
"CHAR cFileName[260];"& _
"CHAR cAlternateFileName[14];") ;创建结构
$fData = DllStructGetPtr($LPWIN32_FIND_DATA) ;获取结构指针

$Kernel32 = DllOpen("Kernel32.dll")
$File = FileOpen("File.txt",9)
$fFile = DllCall($Kernel32,"handle","FindFirstFile","str","d:\*","ptr",$fData)
FileWriteLine($File,DllStructGetData($LPWIN32_FIND_DATA,"cFileName")) ;找到的第一个文件名写入到File.txt
While 1
$bool = DllCall($Kernel32,"bool","FindNextFile","handle",$fFile[0],"ptr",$fData)
If $bool[0] = 0 Then ExitLoop
FileWriteLine($File,DllStructGetData($LPWIN32_FIND_DATA,"cFileName"))
WEnd

DllCall($Kernel32,"bool","FindClose","handle",$fFile[0]) ;关闭搜索句柄
FileClose($File)
DllClose($Kernel32)


GetCurrentDirectory

 #cs========================================================================================
GetCurrentDirectory 功能：获取进程的当前目录

函数原型：
DWORD WINAPI GetCurrentDirectory(
__in DWORD nBufferLength,
__out LPTSTR lpBuffer
);

参数：
nBufferLength [in]
存储路径字符串缓冲区的大小，一般调用 MAX PATH

lpBuffer [out]
指向获取的路径字符串缓冲区

返回值：
返回 DWORD 值，如果为 0，表示执行失败，可以使用 GetLastError 获取错误信息；如
果为非 0，则获取的路径字符串长度，函数执行成功
#ce========================================================================================

Const $MAX_PATH = 260
$Path = DllCall("Kernel32.dll","dword","GetCurrentDirectory","dword",$MAX_PATH,"str","")
If $Path[0] > 0 Then MsgBox(64,"提示","当前进程路径:"&$Path[2])


GetFileAttributes

 #cs========================================================================================
GetFileAttributes 功能：获取文件或目录的属性

函数原型：
DWORD WINAPI GetFileAttributes(
__in LPCTSTR lpFileName
);

参数：
lpFileName [in]
文件或目录名

返回值：
返回DWORD 值，表示文件属性。如果返回 INVALID_FILE ATTRIBUTES，则表示失败。
可使用 GetLastError 函数获取错误信息。

使用说明
要判断文件具体有哪些属性，需要使用“&”与属性常量进行运算，如果运行结果为真，
则表示具有这种属性。
#ce========================================================================================

;其它属性值参考：http://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx
Const $FILE_ATTRIBUTE_READONLY = 0x1
$fAttrib = DllCall("Kernel32.dll","dword","GetFileAttributes","str","test.txt")
If BitAND($fAttrib[0],$FILE_ATTRIBUTE_READONLY) Then MsgBox(64,"提示","文件具有只读属性")


GetFileSize

 #cs========================================================================================
GetFileSize 功能：获取指定文件的大小（字节)

函数原型：
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);

参数：
hFile [in]
文件句柄

lpFileSizeHigh [out, optional]
在返回的文件大小的dword的变量的指针。
此参数可以是 NULL，如果应用程序不需要dword。

返回值：
GetFileSize 成功时，返回值为一个表示文件大小 DWORD 值。
GetFileSize 失败时，如果lpFileSizeHigh为NULL，返回INVALID_ FILE_SIZE 并可以
调用 GetLastError 函数获取更详细的错误信息；如果 lpFileSizeHigh 为非 NULL，那么同
样返回 INVALID_FILE_SIZE 并且尝试读取 lpFileSizeHigh 指向的值放在高 32位， 并将其和
返回的低 32 位 DWORD 连起来成为一个 64 位的值来表示文件大小。lpFileSizeHigh 为合法
值则 GetLastError 返回NO_ERROR，表示该 API 仍然成功；否则，GetLastError 返回一个不
等于 NO_ERROR 的值。
#ce========================================================================================

Const $GENERIC_READ = 0x80000000
Const $GENERIC_WRITE = 0x40000000
Const $RW = BitOR($GENERIC_READ,$GENERIC_WRITE)
Const $CREATE_ALWAYS = 2
Const $FILE_ATTRIBUTE_NORMAL = 0x80
Const $INVALID_HANDLE_VALUE = -1
$hFile = DllCall("Kernel32.dll","handle","CreateFile","str","test.txt","dword",$RW,"dword",0, _
"ptr",0,"dword",$CREATE_ALWAYS,"dword",$FILE_ATTRIBUTE_NORMAL,"handle",0)
If $hFile[0] = $INVALID_HANDLE_VALUE Then Exit MsgBox(16,"错误","打开失败")

;写入数据
DllCall("Kernel32.dll","bool","WriteFile","handle",$hFile[0],"str","你好","dword",4,"dword*",0,"ptr",0)
;获取文件大小
$FileSize = DllCall("Kernel32.dll","dword","GetFileSize","handle",$hFile[0],"dword*",0)
MsgBox(64,"提示","文件大小为:"&$FileSize[0]&"字节")
;关闭句柄
DllCall("Kernel32.dll","bool","CloseHandle","handle",$hFile[0])


GetModuleFileName

 #cs========================================================================================
GetModuleFileName 功能：获取模块文件名，当第一个参数为 NULL 时获取当前模块路径

函数原型：
DWORD WINAPI GetModuleFileName(
__in_opt HMODULE hModule,
__out LPTSTR lpFilename,
__in DWORD nSize
);

参数：
hModule [in, optional]
所要获取模块路径的模块句柄
如果此参数为 NULL，则 GetModuleFileName 将检索当前进程的可执行文件的路径。

lpFilename [out]
输出参数，模块的全路径

nSize [in]
lpFilename 所指向的缓冲区的大小

返回值：
返回 DWORD 值，如果为 0，表示执行失败；如果为非 O，则执行成功，表示获取的路径
的字符串长度。
#ce========================================================================================

$ModulePath = DllCall("Kernel32.dll","dword","GetModuleFileName","handle",0,"str","","dword",260)
If $ModulePath[0] Then MsgBox(64,"提示","当前模块路径:"&$ModulePath[2])


MoveFile

 #cs========================================================================================
MoveFile 功能：移动现有的文件或目录，包括子目录和文件

函数原型：
BOOL WINAPI MoveFile(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName
);

参数：
lpExistingFileName [in]
当前文件或本地计算机上的目录的名称。.

lpNewFileName [in]
新的文件或目录的名称。新的文件或目录的名称。
一个新的文件可能在不同的文件系统或驱动器
一个新的目录必须是在同一驱动器上。

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================

DllCall("Kernel32.dll","bool","MoveFile","str","a.txt","str","b.txt") ;将a.txt改名为b.txt

;注：如果需要不同驱动器之间移动文件，则使用copyfile先复制后删除原来文件
;将c:\a.txt移动到d:\
_MoveFile("c:\a.txt","d:\a.txt")

Func _MoveFile($aFile,$bFile)
$Kernel32 = DllOpen("Kernel32.dll")
$Copy = DllCall($Kernel32,"bool","CopyFile","str",$aFile,"str",$bFile,"bool",False)
If $Copy[0] Then DllCall($Kernel32,"bool","DeleteFile","str",$aFile)
EndFunc


ReadFile

 #cs========================================================================================
ReadFile 功能：读取文件句柄指定的文件内容

函数原型：
BOOL WINAPI ReadFile(
__in HANDLE hFile,
__out LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__out_opt LPDWORD lpNumberOfBytesRead,
__inout_opt LPOVERLAPPED lpOverlapped
);

参数：
hFile [in]
文件的句柄，参数必须创建具有写访问权限

lpBuffer [out]
指向读取文件数据存储的内存缓冲区

nNumberOfBytesToRead [in]
指明需要从文件中读出的数据的大小，不能大于
lpBuffer 内存块的大小，否则会造成溢出。

lpNumberOfBytesRead [out, optional]
指向存储实际读出的数据大小的 DWORD 变量。在读
文件时，可能由于已经到达文件尾等原因，其值可能小于 rtNumberOfBytesToRead。如果
lpOverlapped 为NULL，则该参数不能为 NULL。

lpOverlapped [in, out, optional]
指向 OVERLAPPED 结构体的指针，如果调用 CreateFile 时设
置了 FILE_FLAG_OVERLAPPED 标志，则需要使用该参数，否则可以为 NULL。

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================
Const $GENERIC_READ = 0x80000000
Const $GENERIC_WRITE = 0x40000000
Const $RW = BitOR($GENERIC_READ,$GENERIC_WRITE)
Const $OPEN_EXISTING = 3
Const $FILE_ATTRIBUTE_NORMAL = 0x80
Const $INVALID_HANDLE_VALUE = -1
$hFile = DllCall("Kernel32.dll","handle","CreateFile","str","test.txt","dword",$RW,"dword",0, _
"ptr",0,"dword",$OPEN_EXISTING,"dword",$FILE_ATTRIBUTE_NORMAL,"handle",0)
If $hFile[0] = $INVALID_HANDLE_VALUE Then Exit MsgBox(16,"错误","打开失败")

;读取数据
$r = DllStructCreate("char[256]")
$ToRead = DllStructGetPtr($r)
$Read = DllCall("Kernel32.dll","bool","ReadFile","handle",$hFile[0],"ptr",$ToRead,"dword",4,"dword*",0,"ptr",0)
MsgBox(64,"提示","test.txt内容："&DllStructGetData($r,1))
;关闭句柄
DllCall("Kernel32.dll","bool","CloseHandle","handle",$hFile[0])


SetCurrentDirectory

 #cs========================================================================================
SetCurrentDirectory 功能：改变进程的当前目录

函数原型：
BOOL WINAPI SetCurrentDirectory(
__in LPCTSTR lpPathName
);

参数：
lpPathName [in]
所要设置的路径值

lpBuffer [out]
指向获取的路径字符串缓冲区

返回值：
返回 DWORD 值，如果为 0，表示执行失败，可以使用 GetLastError 获取错误信息；如
果为非 0，则执行成功
#ce========================================================================================

Const $MAX_PATH = 260
DllCall("Kernel32.dll","bool","SetCurrentDirectory","str","C:windows\") ;将当前目录设置为c:\windows
$Path = DllCall("Kernel32.dll","dword","GetCurrentDirectory","dword",$MAX_PATH,"str","")
If $Path[0] > 0 Then MsgBox(64,"提示","当前进程路径:"&$Path[2])


SetFileAttributes

 #cs========================================================================================
SetFileAttributes 功能：设置文件或目录的属性

函数原型：
BOOL WINAPI SetFileAttributes(
__in LPCTSTR lpFileName,
__in DWORD dwFileAttributes
);

参数：
lpFileName [in]
需要设置属性的文件或目录名

dwFileAttributes [in]
文件属性值，多个文件属性值用"或"运算符合并

返回值：
成功返回非零
失败返回零
详细信息GetLastError获取
#ce========================================================================================

;其它属性值参考：http://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx
Const $FILE_ATTRIBUTE_READONLY = 0x1
Const $FILE_ATTRIBUTE_HIDDEN = 0x2
$fSetAttrib = DllCall("Kernel32.dll", "bool", "SetFileAttributes","str","test.txt", "dword", _
BitOR($FILE_ATTRIBUTE_READONLY, $FILE_ATTRIBUTE_HIDDEN))

If $fSetAttrib[0] Then
$fAttrib = DllCall("Kernel32.dll", "dword", "GetFileAttributes", "str", "test.txt")
If BitAND($fAttrib[0], $FILE_ATTRIBUTE_READONLY) Then MsgBox(64, "提示", "文件具有只读属性")
If BitAND($fAttrib[0], $FILE_ATTRIBUTE_HIDDEN) Then MsgBox(64, "提示", "文件具有隐藏属性")
EndIf


WriteFile

 #cs========================================================================================
WriteFile 功能：将数据写入到指定的文件或输入/输出 (I/O) 设备

函数原型：
BOOL WINAPI WriteFile(
__in HANDLE hFile,
__in LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__out_opt LPDWORD lpNumberOfBytesWritten,
__inout_opt LPOVERLAPPED lpOverlapped
);

参数：
hFile [in]
文件的句柄，参数必须创建具有写访问权限

lpBuffer [in]
指向包含要写入的文件或设备的数据的缓冲区的指针。

nNumberOfBytesToWrite [in]
要写入的文件或设备的字节数

lpNumberOfBytesWritten [out, optional]
指向存储真实写入的数据大小的变量，可能由于
已经到达文件尾等原因，其值可能与 nNumberOfBytesToWrite 不同。如果 lpOverlapped 为
NULL，则该参数不能为 NULL。

lpOverlapped [in, out, optional]
指向 OVERLAPPED 结构体的指针，如果调用 CreateFile 时设
置了 FILE_FLAG_OVERIAPPED 标志，则需要使用该参数。可以为 NULL。

返回值：
成功，则返回值为非零值。
失败，则返回值为零
若要获取扩展的错误的信息，请调用GetLastError。
#ce========================================================================================

Const $GENERIC_READ = 0x80000000
Const $GENERIC_WRITE = 0x40000000
Const $RW = BitOR($GENERIC_READ,$GENERIC_WRITE)
Const $CREATE_ALWAYS = 2
Const $FILE_ATTRIBUTE_NORMAL = 0x80
Const $INVALID_HANDLE_VALUE = -1
$hFile = DllCall("Kernel32.dll","handle","CreateFile","str","test.txt","dword",$RW,"dword",0, _
"ptr",0,"dword",$CREATE_ALWAYS,"dword",$FILE_ATTRIBUTE_NORMAL,"handle",0)
If $hFile[0] = $INVALID_HANDLE_VALUE Then Exit MsgBox(16,"错误","打开失败")

;写入数据
DllCall("Kernel32.dll","bool","WriteFile","handle",$hFile[0],"str","你好","dword",4,"dword*",0,"ptr",0)
;关闭句柄
DllCall("Kernel32.dll","bool","CloseHandle","handle",$hFile[0])


Easy CHM - http://www.eTextWizard.com

您现在使用的CHM文件由Easy CHM的未注册版本制作而成。
注册版本不会在CHM里自动添加此页面。

制作时使用的Easy CHM程序版本号：v3.84
制作日期：2011/12/29

Easy CHM 软件 软件出品: 国华软件 中国北京 |  | 截屏图片
免费下载最新的试用版 | 文件大小: 2989k - 2.84MB | 软件类型: 共享软件 购买注册: 这里

关键词: make chm, create chm, chm制作工具, chm电子书制作工具,chm帮助文件制作工具

描述:

Easy CHM是国华软件推出的一款强大的CHM电子书或CHM帮助文件的快速制作工具。

使用EasyCHM只需要三个步骤就可以完成CHM的制作：
1、用户指定一个目录，EasyCHM会自动导入全部目录及文件;
2、设置CHM编译选项;
3、开始制作。

EasyCHM非常适合个人和单位制作高压缩比的带有全文检索及高亮显示搜索结果的网页集锦、CHM帮助文件、产品说明、公司介绍、CHM电子书等等。

主要功能：

  • 全自动的目录及文件导入（可以包括子目录）;
  • EasyCHM支持导入任意的文件类型;
  • EasyCHM操作速度快，性能稳定，EasyCHM因为上手容易深得广大用户好评;
  • EasyCHM自动生成CHM的目录列表并自动生成所有目录项;
  • 为CHM的目录列表自动添加多级编号;
  • 在编辑目录项、索引项时用到的移动、拖拽、替换等操作中Easy CHM完全支持多选及拖拽操作，避免了一项一项地操作，极大的减少用户手工 － 非常适合企业维护大型CHM帮助文档;
  • 支持批量查找替换多级目录各项的标题文字内容;
  • 允许用户指定从文本文件的第N行自动截取标题;
  • 易用的目录/索引编辑器;
  • 丰富实用的CHM制作选项帮助用户制作更加个性化的专业CHM电子书或CHM帮助文件;
  • EasyCHM自动生成输出Alias和Map头文件;
  • EasyCHM自动生成上下文相关的帮助文件（ContextID），适合于软件公司制作专业的支持Help Context ID的专业帮助文件;
  • EasyCHM可以保存工程文件，方便企业用户编辑维护文档。
  • 批量更换CHM目录各项的图标;
  • 内嵌CHM反编译工具
  • 更多功能

EasyCHM未注册版本的主要限制：

  1. EasyCHM的未注册版本可以制作带任意层级目录的CHM，但是每个CHM的工具栏上都会自动添加一个ABOUT按钮，以提醒用户注册。
    注册版本不会添加ABOUT按钮。
  2. EasyCHM的未注册版本无法保存CHM的通用工程文件，如*.HHP、*.HHC、*.HHK等。
    未注册版本的EasyCHM会自动删除*.HHP、*.HHC、*.HHK这几个文件。
  3. 未注册版本制作的CHM标题上会有Made by UNREGISTERED version of Easy CHM这样的提示您试用的是未注册版本的文字。

注册版本无任何限制，也不会再显示ABOUT按钮或者提示注册的文字。
如果EasyCHM可以为您的工作和学习提供帮助，请注册购买，感谢您给予软件作者的支持。
联系方式:
国华软件站点一: http://www.etextwizard.com
国华软件站点二: http://www.zipghost.com
技术支持信箱: webmaster@etextwizard.com
购买方式:
在线购买:（可提供发票，支持很多种支付方式，包括在线支付、银行电汇、邮政汇款等）
通过“共享软件注册中心”购买单用户企业版

通过“共享软件注册中心”购买单用户家庭版
直接向国华软件注册购买（共3种方式）：
1、招商银行划款:
开户行： 招商银行北京分行双榆树支行
帐 号： 001015570093
户 名： 冯国华
2、中国农业银行金穗卡转帐（注意是卡号）：
金穗卡卡号： 95599 8001 42061 34216
收 款 人： 冯国华
3、中国工商银行牡丹灵通卡转帐：

开户城市：北京
牡丹灵通卡卡号：9558 8202 0000 3186295 （注意是卡号9558820200003186295）
收 款 人： 冯国华

注意事项：
直接向作者注册的用户请在汇出足额的注册费后以EMAIL形式通知作者，同时请尽量提供

  • 汇款日期

  • 汇出城市

  • 您汇到哪个银行帐号？

  • 汇款人姓名

  • 用于接收注册码的信箱（请确保可以接收邮件，最好多提供）

  • 您希望使用的注册用户名（程序将授权给这个用户）

  • 要注册的软件名称及套数

您提供的资料详细些会比较方便确认。
作者在确认支付已完成后将会马上发出注册码。
用户在收到注册信后请尽量给软件作者发个类似“已收到注册码”的确认信 - 感谢您的配合！
免费下载最新的试用版:
http://www.etextwizard.com/cn/download/ecdown.html

系统需求: Win98, WinME, WinXP, Win2000,WinVista, Win7
安装支持: 支持安装及卸载