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

如何根据MAC获取配置文件里相应的计算机名和IP?

  [复制链接]
发表于 2010-1-31 03:30:57 | 显示全部楼层 |阅读模式
我还是个新手。。最新写了一个GHOST后自动装网维大师的程序,是通过读取配置文件和窗口输入来填写网维大师相关设置的。
想在这基础上加一个功能
就是填写计算机名和IP的时候
可以选择根据MAC来修改的
配置文件里我想做个开关,比如新网吧的话就关掉用手动填写,有MAC列表的话就开启。
由于是新手,代码格式很乱。。。大家见谅
代码如下
#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=ico.ico
#AutoIt3Wrapper_Res_Comment=
#AutoIt3Wrapper_Res_Description=
#AutoIt3Wrapper_Res_LegalCopyright=
#AutoIt3Wrapper_Res_Fileversion=8.8.8.8
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****


#include <Misc.au3>
HotKeySet("{ESC}", "Exitzd")

;=============== 每次只能运行一个程序 =================
if _Singleton("AutoICafe",1) = 0 Then ;如果带有这个标题的窗口已经存在, 则转到 OhNo 自定义函数模块
        OhNo() ;转到自定义函数语句
        EndIf ;结束以上的 If 判断

Func OhNo() ;自定义函数模块
        MsgBox(64 + 262144,'老大Orz, 貌似本程序已经运行了!','貌似本程序已经运行了, 请结束任务后再运行...囧..!!',5) ;对话框提示, 延时 5 秒 (可以用气泡函数 TrayTip() 提示)
        Exit ;退出
EndFunc ;自定义函数模块结束
;===================================================

Dim $Dll 
$File = @ScriptDir&"\setup.ini"
FileInstall("setup.ini", @ScriptDir & "\setup.ini", 0)
$infcheck = FileExists(@ScriptDir & "\setup.ini");检查指定文件或目录是否存在 
If $infcheck = 0 Then 
     MsgBox(48,"温馨提醒您:", "未找到程序配置文件,程序将自动创建."& @CRLF &"请将文件内的服务器路径修改成自己的实际路径.") 


     IniWrite($File, "服务器IP", "IP","192.168.0.250")
     IniWrite($File, "客户端参数设置", "前段机器名","TYS")
     IniWrite($File, "客户端参数设置", "前段IP","192.168.0")
     IniWrite($File, "客户端参数设置", "子网","255.255.255.0")
     IniWrite($File, "客户端参数设置", "网关","192.168.0.1")
     IniWrite($File, "客户端参数设置", "DNS","202.100.192.68")
     IniWrite($File, "客户端参数设置", "DNS2","202.100.199.8")
     IniWrite($File, "客户端参数设置", "虚拟内存大小","1024")
     IniWrite($File, "客户端参数设置", "是否安装网络驱动","1")
     IniWrite($File, "客户端参数设置", "是否还原","0")
     IniWrite($File, "客户端参数设置", "是否重启","0")

EndIf



Dim $a,$b,$c,$d,$e,$f,$g,$h,$j,$k,$i,$n,$o,$l   ;定义变量

$a=IniRead("setup.ini","服务器IP","IP","")   ;从setup.ini文件中读取输入并赋予给变量a,下面同理(同理的只解释1遍哦)
$b=IniRead("setup.ini","客户端路径","path","")
$c=IniRead("setup.ini","客户端参数设置","子网","")
$d=IniRead("setup.ini","客户端参数设置","网关","")
$e=IniRead("setup.ini","客户端参数设置","DNS","")
$f=IniRead("setup.ini","客户端参数设置","DNS2","")
$n=IniRead("setup.ini","客户端参数设置","是否安装网络驱动","")
$g=IniRead("setup.ini","客户端参数设置","是否还原","")
$h=IniRead("setup.ini","客户端参数设置","是否重启","")
$i=IniRead("setup.ini","客户端参数设置","前段机器名","")
$o=IniRead("setup.ini","客户端参数设置","前段IP","")
$l=IniRead("setup.ini","客户端参数设置","虚拟内存大小","")
$j=InputBox("网维自动部署程序","输入后段机器名","","",350,10)
$k=InputBox("网维自动部署程序","输入后段IP","","",350,10)

RegWrite ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters", "VirtualNetworkNumber", "REG_DWORD", $k)

RegWrite ("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NwlnkIpx\Parameters","VirtualNetworkNumber", "REG_DWORD", $k)

const $Hkey1="HKLM\SYSTEM\CurrentControlSet\Enum\PCIIDE\IDEChannel"
const $Hkey2="HKLM\SYSTEM\CurrentControlSet\Control\Class"
$driver=0
for $x=1 to 20
        $subkey1=RegEnumKey($Hkey1,$x)
        if @error=-1 then ExitLoop
        $subkey2=RegRead($Hkey1&""&$subkey1,"Driver")
        $name=RegRead($Hkey2&""&$subkey2,"DriverDesc")
        $master=RegRead($Hkey2&""&$subkey2,"MasterDeviceType")
                if $master=0 Then
                        RegWrite($Hkey2&""&$subkey2,"UserMasterDeviceType","REG_DWORD","3")
                ElseIf $master=1 Then
                        $driver=$driver+1
                EndIf
        $slave=RegRead($Hkey2&""&$subkey2,"SlaveDeviceType")
                if $slave=0 Then
                        RegWrite($Hkey2&""&$subkey2,"UserSlaveDeviceType","REG_DWORD","3")
                ElseIf $slave=1 Then
                        $driver=$driver+1
                EndIf
                Next
             
Run($b)   
Sleep(8000)
If WinExists("网维大师(ICafe) 娱乐平台--安装","修改、修复或删除程序") Then
Sleep(1000)
WinWaitActive("网维大师(ICafe) 娱乐平台--安装","修改、修复或删除程序")
Send("!r")
Send("!n")
WinWaitActive("网维大师(ICafe) 娱乐平台--安装","是否要完全除去所选应用程序及其所有功能")
Send("!y")
WinWaitActive("网维大师(ICafe) 娱乐平台--安装","卸载完成")
Send("{down}")
Send("{enter}")
run($b)
EndIf
WinWaitActive("网维大师(ICafe) 娱乐平台--安装","Wizard 将在计算机中安装")
Send("!n")
WinWaitActive("网维大师提醒您","D盘数据会被清空")
Send("!y")
WinWaitActive("网维大师(ICafe) 娱乐平台--安装","顺网软件最终用户许可协议")
Send("!y")
WinWaitActive("网维大师(ICafe) 娱乐平台--安装","InstallShield Wizard 完成")
Send("{enter}")
WinWaitActive("客户端安装类型选择","系统管理的大小")
Send("!p")
ControlSetText("客户端安装类型选择","系统管理的大小","Edit1",$l)
ControlSetText("客户端安装类型选择","系统管理的大小","Edit2",$l)
ControlSetText("客户端安装类型选择","系统管理的大小","Edit3",$a);把变量A的值发送到文本输入框中,变量A是从INI文件中读取的
If $n=0 Then
Send("!a")
EndIf
Send("!n")
WinWaitActive("手动设置机器名与IP","客户机将在重启后处于还原保护状态")
ControlSetText("手动设置机器名与IP","客户机将在重启后处于还原保护状态","Edit1",$i&$j)
ControlSetText("手动设置机器名与IP","客户机将在重启后处于还原保护状态","Edit2",$o&"."&$k);用&来连接两个字符串
ControlSetText("手动设置机器名与IP","客户机将在重启后处于还原保护状态","Edit3",$c)
ControlSetText("手动设置机器名与IP","客户机将在重启后处于还原保护状态","Edit4",$d)
ControlSetText("手动设置机器名与IP","客户机将在重启后处于还原保护状态","Edit5",$e)
ControlSetText("手动设置机器名与IP","客户机将在重启后处于还原保护状态","Edit6",$f)
If $g=0 Then
Send("!r")
EndIf
Sleep(1000)
Send("!o")
WinWaitActive("提示","客户端安装完成,是否重启系统")
If $h=0 Then
Send("!n")
WinActive("手动设置机器名与IP","客户机将在重启后处于还原保护状态")
Send("!c")
Else
Send("!y")
Sleep(2000)
EndIf
Func Exitzd()
    Exit
EndFunc
发表于 2010-1-31 09:19:33 | 显示全部楼层
在INI文件中增加立两个字段即可,如:
[MAC_IP]
002548596A5C2 = 10.99.2.156
.....
[MAC_HOSTNAME]
002548596A5C2 = HOST_A01
......

在AU3中用INIREAD()去读到变量中。
发表于 2010-1-31 09:24:37 | 显示全部楼层
利用INIREAD()返回值判断INI文件中有否有该MAC地址:
$ip = IniRead("SETUP.ini", "MAC_IP", $MAC, "ERROR")
如果$ip="ERROR",则手动填写。
不知能否满足楼主需求。
 楼主| 发表于 2010-1-31 19:40:06 | 显示全部楼层
但是不先获取本机的MAC,如何让程序做判断呢?
 楼主| 发表于 2010-2-1 00:16:48 | 显示全部楼层
我顶。。。啊。。。求解求解
 楼主| 发表于 2010-2-1 18:13:42 | 显示全部楼层
不能沉啊。。。。。顶上来!!!我顶!
 楼主| 发表于 2010-2-2 00:12:03 | 显示全部楼层
为什么没有人理我呢。。。。
发表于 2010-2-2 22:06:53 | 显示全部楼层
Dim mc,mo
Set mc=GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")
For Each mo In mc
    If mo.IPEnabled=True Then
        MsgBox "本机网卡MAC地址是: " & mo.MacAddress
        Exit For
    End If
Next

获取MAC对比
 楼主| 发表于 2010-2-2 22:29:23 | 显示全部楼层
能否给一个较完整的流程呢?还不是很明白
发表于 2010-2-3 12:06:59 | 显示全部楼层
唉。。 我给你个思路吧。。。
1.程序运行后,获取本机网卡MAC值。
2.从配置文件中。以网卡地址为主键读取相应的配置信息。
3.如果配置信息读取失败(读不出信息。),则判断为新装的机器。执行新装代码
4.如果读出,则执行设置程序,按照配置信息设置。
发表于 2010-2-9 11:06:27 | 显示全部楼层
论坛源码区我看过最起码不下两个类似的完整源码了!如果楼主多用用搜索!相信就不会在这里问了!
发表于 2010-4-8 21:43:14 | 显示全部楼层
谢谢分享。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 04:14 , Processed in 0.098136 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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