找回密码
 加入
搜索
查看: 1847|回复: 3

[AU3基础] 已解决 枚举装入点API调用,请教个缓冲区大小设置问题

[复制链接]
发表于 2012-5-4 13:40:27 | 显示全部楼层 |阅读模式
本帖最后由 Qokelate 于 2012-5-4 13:52 编辑

现成的Au3里面找不到相关函数,只好自己弄个用着先,不过有个问题搞不懂,请教达人

缓冲区大小如何自动获取? (cchBufferLength)


Func OpenKernel32DLL($CloseHWND = 0)
 If $CloseHWND = 0 Then Return DllOpen('Kernel32.dll')
 DllClose($CloseHWND)
EndFunc   ;==>OpenKernel32DLL

;~ HANDLE WINAPI FindFirstVolume(
;~   __out  LPTSTR lpszVolumeName,
;~   __in   DWORD cchBufferLength
;~ );
Func FindFirstVolume()
 Local $hDLL = OpenKernel32DLL()
 Local $tAPI = DllStructCreate('char VolumeName[255]')
 Local $p1 = DllStructGetPtr($tAPI, 1)
 Local $iLen = DllStructGetSize($tAPI)
 Local $API = DllCall($hDLL, 'Handle', 'FindFirstVolume', 'ptr', $p1, 'dword', $iLen)
 OpenKernel32DLL($hDLL)
 Return $API[0]
EndFunc   ;==>FindFirstVolume

;~ BOOL WINAPI FindVolumeClose(
;~   __in  HANDLE hFindVolume
;~ );
Func FindVolumeClose($hVolume)
 Local $hDLL = OpenKernel32DLL()
 DllCall($hDLL, 'int', 'FindVolumeClose', 'handle', $hVolume)
 OpenKernel32DLL($hDLL)
EndFunc   ;==>FindVolumeClose

;~ BOOL WINAPI FindNextVolume(
;~ __in HANDLE hFindVolume,
;~ __out LPTSTR lpszVolumeName,
;~ __in DWORD cchBufferLength
;~ );
Func FindNextVolume($hVolume)
 Local $tAPI = DllStructCreate('char VolumeName[255]')
 Local $p1 = DllStructGetPtr($tAPI, 1)
 Local $iLen = DllStructGetSize($tAPI)
 Local $hDLL = OpenKernel32DLL()
 Local $API = DllCall($hDLL, 'int', 'FindNextVolume', 'handle', $hVolume, 'ptr', $p1, 'dword', $iLen)
 OpenKernel32DLL($hDLL)
 Return DllStructGetData($tAPI, 1)
EndFunc   ;==>FindNextVolume

Local $hFind = FindFirstVolume()
Local $sVolumeMP
While 1
 $sVolumeMP = FindNextVolume($hFind)
 If $sVolumeMP = '' Then ExitLoop
 MsgBox(0,0,$sVolumeMP)
WEnd
FindVolumeClose($hFind)
发表于 2012-5-4 13:47:54 | 显示全部楼层
不多说,上图,下载搜索"缘鸟api"


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-5-4 13:52:11 | 显示全部楼层
回复 2# 风行者


    原来如此,受教了
发表于 2012-5-4 14:03:06 | 显示全部楼层
查看msdn:http://msdn.microsoft.com/en-us/library/windows/desktop/aa364425(v=vs.85).aspx

FindFirstVolume 函数

第一个参数是一个指向有结束符('\0')的字符串指针,所以缓冲区分配足够大的内存就可以
api 函数会根据结束符自动截取需要的,一般使用MAX_PATH ,260字节

可以参考它的例子:
http://msdn.microsoft.com/en-us/library/windows/desktop/cc542456(v=vs.85).aspx
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 13:30 , Processed in 0.204349 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表