风行者 发表于 2010-11-24 19:12:21

[已解决]api函数GetLogicalDriveStrings问题

本帖最后由 风行者 于 2010-11-26 10:45 编辑

下面代码为什么只返回一个盘符,应该是所有盘符显示才对
不知道哪里问题?
$stString= DLLStructCreate("char ui")
DllCall("Kernel32.dll","DWORD","GetLogicalDriveStrings","DWORD",1023,"ptr",DllStructGetPtr($stString))
$sFileName= DllStructGetData($stString,"ui")
MsgBox(0,"",$sFileName)

pusofalse 发表于 2010-11-24 21:01:54

$stString中的数据是以NULL字符相分隔的,用StringLen函数取得下一字符串的偏移地址,指针加上该偏移就是下一个字符串,最后的一个字符串是以2个NULL字符隔开的。

风行者 发表于 2010-11-24 21:46:20

能不能举个例子

pusofalse 发表于 2010-11-24 23:39:06


$tBuffer = DllStructCreate("char ui")
$pBuffer = DllStructGetPtr($tBuffer)

$iResult = DllCall("Kernel32.dll", "dword", "GetLogicalDriveStrings", "dword", 1024, "ptr", $pBuffer)

While 1
        $tDrive = DllStructCreate("char ui", $pBuffer)
        $sDrive = DllStructGetData($tDrive, "ui")
        If ($sDrive = "") Then ExitLoop

        MsgBox(0, "", $sDrive)
        $pBuffer += StringLen($sDrive) + 1
WEnd
页: [1]
查看完整版本: [已解决]api函数GetLogicalDriveStrings问题