本帖最后由 bbip 于 2009-9-19 16:26 编辑
昨天一同学让帮忙写个东西 根据不同的时间段自动设置相应网关;原因是当地网吧晚上12点左右光纤停网(不让搞通宵)第二天8点左右来网,网吧老板为了继续营业都拉了根adsl 这样就有了两个路由器(分别用不同的IP) 程序是写出来了 可以自定义任意两端时间设置相应网关 不过我比较时间的算法太复杂了 我自己有时候都糊涂了 看看哪位高手给个更简洁的代码 先谢谢了
代码:#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=e:\autoit3\Aut2Exe\Icons\GoLive.ico
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
if Not FileExists ( @ScriptDir&"\set.ini" ) then
$file = FileOpen(@ScriptDir&"\set.ini", 10)
If $file = -1 Then
MsgBox(0, "错误", "不能打开文件.")
Exit
EndIf
FileWriteLine($file, "[配置]")
FileWriteLine($file, "时间1=")
FileWriteLine($file, "网关1=")
FileWriteLine($file, "时间2=")
FileWriteLine($file, "网关2=")
FileClose($file)
MsgBox(0,"友情提示","请先配置好 set.ini 文件")
Exit
endif
$tmp_time1= IniRead(@ScriptDir&"\set.ini","配置","时间1","")
$tmp_time2= IniRead(@ScriptDir&"\set.ini","配置","时间2","")
$GateWay_1=IniRead(@ScriptDir&"\set.ini","配置","网关1","")
$GateWay_2=IniRead(@ScriptDir&"\set.ini","配置","网关2","")
if $tmp_time1="" Or $tmp_time2="" Or $GateWay_1="" Or $GateWay_2="" then ;如果无法从INI文件中获取全部数据 就给出提示
MsgBox(0,"友情提示","请先配置好 set.ini 文件")
Exit
endif
$tmp=StringSplit ( $tmp_time1, ":")
$time1=int($tmp[1]&$tmp[2]) ;格式化时间 去掉小时和分钟之间的":" 如8:30就变成830
$tmp=StringSplit ( $tmp_time2, ":")
$time2=int($tmp[1]&$tmp[2])
While 1 ;一直执行循环
IF $time1<$time2 Then ;如果时间1小于时间2 (即时间1和时间2之间的时间没有跨度0点)
if $time1<int(@HOUR&@MIN) and $time2>int(@HOUR&@MIN) Then ;如果当前时间在时间1和时间2之间
GateWAY($GateWay_1)
Else
GateWAY($GateWay_2)
EndIf
Else ;否则 (即时间1和时间2之间的时间跨过0点)
$NUM=2400-$time1 ;定义一个变量$num 值为24点和时间1的时间差 意图:把时间1设置为0点 当前时间和时间2 顺延$num分钟
if int(@HOUR&@MIN)+$NUM <2400 Then ;如果当前时间+顺延时间小于2400
if int($time1+$NUM-2400)<int(int(@HOUR&@MIN)+$NUM) and int($time2+$NUM)>int(int(@HOUR&@MIN)+$NUM) Then ;如果(当前时间+顺延时间)在(时间1+顺延时间)和(时间2+顺延时间)之间. 此时(时间1+顺延时间)为0 即0点钟
GateWAY($GateWay_1)
Else ;否则 即 (当前时间+顺延时间)在(时间1+顺延时间)和(时间2+顺延时间)之外
GateWAY($GateWay_2)
EndIf
Else ;否则 即 当前时间+顺延时间大于2400
if int($time1+$NUM-2400)<int(int(@HOUR&@MIN)+$NUM-2400) and int($time2+$NUM)>int(int(@HOUR&@MIN)+$NUM-2400) Then ;把当前时间-2400再比较
GateWAY($GateWay_1)
Else
GateWAY($GateWay_2)
EndIf
EndIf
EndIf
sleep(20000)
WEnd
func GateWAY($GateWay)
dim $array[1]
$array[0] = $Gateway
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\cimv2")
$colNetAdapters = $objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
If IsObj($colNetAdapters) Then
For $objNetAdapter in $colNetAdapters
$objNetAdapter.SetGateways ($array)
Next
EndIf
EndFunc
set.ini
[配置]
时间1=8:30
网关1=192.168.8.1
时间2=20:30
网关2=192.168.10.1
;说明:
;1:时间1和时间2之间的时间用网关1
;2:时间1和时间2之外的时间用网关2 |