找回密码
 加入
搜索
查看: 7660|回复: 11

[AU3基础] 循环读取ini内容,如何获取返回值

  [复制链接]
发表于 2012-11-30 22:36:39 | 显示全部楼层 |阅读模式
本帖最后由 chasedream 于 2012-12-1 19:38 编辑
$var = IniReadSectionNames(@ScriptDir & "\config.ini")
If @error Then
        MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
        For $i = 1 To $var[0]
                MsgBox(4096, "", "字段名:" & $var[$i])
                $var1 = IniReadSection(@ScriptDir & "\config.ini", $var[$i])
                If @error Then
                        MsgBox(4096, "", "错误, 读取INI文件失败.")
                Else
                        For $a = 1 To $var1[0][0]
                                MsgBox(4096, "", "关键字: " & $var1[$a][0] & @CRLF & "值: " & $var1[$a][1])
                        Next
                EndIf
        Next
EndIf
config.ini
[磁盘0]
服务端=192.168.1.245
服务器盘符=g
客户机盘符=g

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

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

我想把获取的$var1[$a][1])
赋给 $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[0]
                $var1 = IniReadSection(@ScriptDir & "\config.ini", $var[$i])
                If @error Then
                        MsgBox(4096, "", "错误, 读取INI文件失败.")
                Else
                        For $a = 1 To $var1[0][0]
                                If $var1[$a][0] = "服务端" Then
                                        $sip = $var1[$a][1]
                                ElseIf $var1[$a][0] = "服务器盘符" Then
                                        $sdisk = $var1[$a][1]
                                Else
                                        If $var1[$a][0] = "客户机盘符" Then
                                                $cdisk = $var1[$a][1]
                                        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[0] <> 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[0]
If $hDrvHandle = $INVALID_HANDLE_VALUE Or $hDrvHandle = 0 Then
        MsgBox(16, "提示:", "加载失败")
        Exit
EndIf

Local $szin, $szout
$szin = DllStructCreate("byte[54]")
$szout = DllStructCreate("byte[4]")
$szinoff = DllStructCreate("byte[4]")
DllStructSetData($szin, 1, $host[1], 1);客户端IP
DllStructSetData($szin, 1, $host[2], 2)
DllStructSetData($szin, 1, $host[3], 3)
DllStructSetData($szin, 1, $host[4], 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[1], 12);服务端IP
DllStructSetData($szin, 1, $ip[2], 13)
DllStructSetData($szin, 1, $ip[3], 14)
DllStructSetData($szin, 1, $ip[4], 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
发表于 2012-11-30 22:41:33 | 显示全部楼层
你这不是已经全都获取到了?

评分

参与人数 1金钱 +10 收起 理由
魔导 + 10 我没慢 我是卡了 - -!

查看全部评分

发表于 2012-11-30 22:44:28 | 显示全部楼层
楼主什么意思?
值   不是已经  读出来了吗?
$var = IniReadSectionNames(@ScriptDir & "\config.ini")
For $i = 1 To $var[0]
        $var1 = IniReadSection(@ScriptDir & "\config.ini", $var[$i])
        For $a = 1 To $var1[0][0]
                MsgBox(4096, $var1[$a][0],$var1[$a][1])
        Next
Next
 楼主| 发表于 2012-11-30 22:50:49 | 显示全部楼层
恩,值都读取出来了。我想问的是,怎么用。
发表于 2012-11-30 22:57:08 | 显示全部楼层
回复 4# chasedream


    越来越迷糊了我
能不能说说您是要用来做什么呢?
发表于 2012-11-30 23:24:00 | 显示全部楼层
我也迷糊了,不知道楼主想说什么
发表于 2012-11-30 23:32:39 | 显示全部楼层
回复 1# chasedream


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

你要获取=后面的值就放在数组里,要怎么用就直接操作数组中相应的元素就可以了~~
发表于 2012-11-30 23:57:02 | 显示全部楼层
仔细一看,原来那群里提问的就是你啊?
 楼主| 发表于 2012-12-1 11:45:52 | 显示全部楼层
我想把获取的$var1[$a][1])
赋给 $sip , $cdisk $sdisk
结果:
$sip = 192.168.1.245
$cdisk  = g
$sdisk  = g
发表于 2012-12-1 12:05:56 | 显示全部楼层
lz看帮助吧,写的很明白
 楼主| 发表于 2012-12-1 19:39:04 | 显示全部楼层
搞定了,也完成了相关功能。
发表于 2012-12-3 23:21:10 | 显示全部楼层
建议楼主   分享一下     虽然目前在座的  都是前辈  
但是  也可以  方便  以后来的  新人
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-26 12:47 , Processed in 0.075738 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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