chasedream 发表于 2012-11-30 22:36:39

循环读取ini内容,如何获取返回值

本帖最后由 chasedream 于 2012-12-1 19:38 编辑

$var = IniReadSectionNames(@ScriptDir & "\config.ini")
If @error Then
        MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
        For $i = 1 To $var
                MsgBox(4096, "", "字段名:" & $var[$i])
                $var1 = IniReadSection(@ScriptDir & "\config.ini", $var[$i])
                If @error Then
                        MsgBox(4096, "", "错误, 读取INI文件失败.")
                Else
                        For $a = 1 To $var1
                                MsgBox(4096, "", "关键字: " & $var1[$a] & @CRLF & "值: " & $var1[$a])
                        Next
                EndIf
        Next
EndIfconfig.ini
[磁盘0]
服务端=192.168.1.245
服务器盘符=g
客户机盘符=g

[磁盘1]
服务端=192.168.1.246
服务器盘符=h
客户机盘符=h
根据需要可能还会添加
[磁盘2]
服务端=192.168.1.247
服务器盘符=m
客户机盘符=m

我要获取=后面的值,研究了一个晚上,不知道怎么用。

我想把获取的$var1[$a])
赋给 $sip , $cdisk $sdisk
结果:
$sip = 192.168.1.245
$cdisk= g
$sdisk= g

终于搞定了,附完整的代码,希望大家指点指点。Opt("TrayIconHide", 1)
$G_SZVERSION = "顺网虚拟磁盘客户端"
If WinExists($G_SZVERSION) Then Exit
AutoItWinSetTitle($G_SZVERSION)

Dim $sdisk, $cdisk, $sip, $cip, $ip, $richsrv, $host

$var = IniReadSectionNames(@ScriptDir & "\config.ini")
If @error Then
        MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
        For $i = 1 To $var
                $var1 = IniReadSection(@ScriptDir & "\config.ini", $var[$i])
                If @error Then
                        MsgBox(4096, "", "错误, 读取INI文件失败.")
                Else
                        For $a = 1 To $var1
                                If $var1[$a] = "服务端" Then
                                        $sip = $var1[$a]
                                ElseIf $var1[$a] = "服务器盘符" Then
                                        $sdisk = $var1[$a]
                                Else
                                        If $var1[$a] = "客户机盘符" Then
                                                $cdisk = $var1[$a]
                                        EndIf
                                EndIf
                        Next
                        _connect()
                        Sleep(2000)
                EndIf
        Next
EndIf

Func _connect()
$richsrv = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Richdisk", "Server")

If $sip = "" Then $sip = $richsrv
$ip = StringSplit($sip, ".")
$host = StringSplit(@IPAddress1, ".")
$sdisk = StringUpper($sdisk)
$cdisk = StringUpper($cdisk)

FileInstall("NetDisk.dll", @SystemDir & "\NetDisk.dll")
Global Const $INVALID_HANDLE_VALUE = Ptr(-1)
Local $result = DllCall(@SystemDir & "\NetDisk.dll", "long", "NetDiskInit")
If $result <> 1 Then
        MsgBox(16, "提示:", "未安装虚拟磁盘驱动")
        Exit
EndIf

$result = DllCall("KERNEL32.DLL", "long", "CreateFile", "str", "\\.\ControlDevice", "long", -1073741824, "long", 0, "ptr", 0, "long", 3, "long", 128, "long", 0)
$hDrvHandle = $result
If $hDrvHandle = $INVALID_HANDLE_VALUE Or $hDrvHandle = 0 Then
        MsgBox(16, "提示:", "加载失败")
        Exit
EndIf

Local $szin, $szout
$szin = DllStructCreate("byte")
$szout = DllStructCreate("byte")
$szinoff = DllStructCreate("byte")
DllStructSetData($szin, 1, $host, 1);客户端IP
DllStructSetData($szin, 1, $host, 2)
DllStructSetData($szin, 1, $host, 3)
DllStructSetData($szin, 1, $host, 4)
DllStructSetData($szin, 1, 30, 6)
DllStructSetData($szin, 1, 140, 7)
DllStructSetData($szin, 1, 127, 8)
DllStructSetData($szin, 1, 24, 9)
DllStructSetData($szin, 1, 234, 10)
DllStructSetData($szin, 1, Asc($cdisk), 11);客户端盘符
DllStructSetData($szin, 1, $ip, 12);服务端IP
DllStructSetData($szin, 1, $ip, 13)
DllStructSetData($szin, 1, $ip, 14)
DllStructSetData($szin, 1, $ip, 15)
DllStructSetData($szin, 1, Asc($sdisk), 16);服务端盘符
DllStructSetData($szin, 1, 252, 53)
DllStructSetData($szin, 1, 38, 54)

;连接虚拟磁盘
DllCall("Kernel32.dll", "long", "DeviceIoControl", "long", $hDrvHandle, "long", 2244608, "ptr", DllStructGetPtr($szin), "long", 54, "ptr", DllStructGetPtr($szout), "long", 4, "int*", 0, "ptr", 0)
EndFunc

afan 发表于 2012-11-30 22:41:33

你这不是已经全都获取到了?

魔导 发表于 2012-11-30 22:44:28

楼主什么意思?
值   不是已经读出来了吗?
$var = IniReadSectionNames(@ScriptDir & "\config.ini")
For $i = 1 To $var
        $var1 = IniReadSection(@ScriptDir & "\config.ini", $var[$i])
        For $a = 1 To $var1
                MsgBox(4096, $var1[$a],$var1[$a])
        Next
Next

chasedream 发表于 2012-11-30 22:50:49

恩,值都读取出来了。我想问的是,怎么用。

魔导 发表于 2012-11-30 22:57:08

回复 4# chasedream


    越来越迷糊了我
能不能说说您是要用来做什么呢?

kood481748 发表于 2012-11-30 23:24:00

我也迷糊了,不知道楼主想说什么

annybaby 发表于 2012-11-30 23:32:39

回复 1# chasedream


    代码风格不错,估计不是你自己写的吧??不然应该不会问这问题

你要获取=后面的值就放在数组里,要怎么用就直接操作数组中相应的元素就可以了~~

lpxx 发表于 2012-11-30 23:57:02

仔细一看,原来那群里提问的就是你啊?

chasedream 发表于 2012-12-1 11:45:52

我想把获取的$var1[$a])
赋给 $sip , $cdisk $sdisk
结果:
$sip = 192.168.1.245
$cdisk= g
$sdisk= g

netegg 发表于 2012-12-1 12:05:56

lz看帮助吧,写的很明白

chasedream 发表于 2012-12-1 19:39:04

搞定了,也完成了相关功能。

魔导 发表于 2012-12-3 23:21:10

建议楼主   分享一下   虽然目前在座的都是前辈
但是也可以方便以后来的新人
页: [1]
查看完整版本: 循环读取ini内容,如何获取返回值