作者cole945 (躂躂..)
看板EZsoft
標題Re: [請益] 撥接到想要的ip
時間Fri Feb 22 20:10:11 2008
※ 引述《vernc (cralvin)》之銘言:
: 或那位提供這方面vbs要看那個網頁或那本書
(這篇是被修改內文過的文章XD )
http://moon.cse.yzu.edu.tw/~s922254/applet/redial.vbs
陸陸續續有幾個人問我程式要怎麼改..
因為我原本的程式有幾個地方嚴重寫錯,
所以重改了一份~ 對一般的 user只有開頭三行需要修改
BadIP = "61." ' 這裡指定你不想要的開頭
ShowMessage = True ' 是否要顯示連線過程的訊息
SleepInt = 2000 ' 每次重連的停頓時間(毫秒)
如果 ShowMessage 為 True, 那執行時就會有個黑色畫面顯示每次的 IP
不想看到就改成 False,
一莫一樣的程式內容我貼在下面, 以免 dead-link ||
' *****************************************
' 此段為使用者需要自行修改的部份
' *****************************************
BadIP = "61." ' 這裡指定你不想要的開頭
ShowMessage = True ' 是否要顯示連線過程的訊息
SleepInt = 2000 ' 每次重連的停頓時間(毫秒)
' **************** 結束 ******************
If ShowMessage Then CheckStartMode
Set objWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\.\root\cimv2")
' 這是例用 Windwos 提供的 WMI 來查網卡的 IP
Set wshShell = WScript.CreateObject ("WSCript.shell")
While True
tag = 0
Set colAdapters = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
' 放網頁資料的 table
For Each objAdapter in colAdapters
If Not IsNull(objAdapter.IPAddress) Then
For i = 0 To UBound(objAdapter.IPAddress)
If InStr(objAdapter.Caption(i),"WAN Miniport") >0 Then
' 你的 ADSL 應該是以 WAN Miniport 表示,
' 如果錯了的話, 你就直接把所有網卡及其對應 IP show 出來看
' 就知道應該要撈哪張卡的 IP了
tag = 1 ' 標記找到你的 ADSl 連線
CurrIP = objAdapter.IPAddress(i)
If ShowMessage Then WScript.Echo "目前的IP: " + CurrIP
If Left( CurrIP, Len(BadIP) ) = BadIP Then
' 若 BadIP 開頭, 利用 rasdial 指令斷線, 停 2000毫秒後
' 重新連線, ADSL 指的是你網頭連線裡的 Sonet連線明稱,
' 請改成你自己的
If ShowMessage Then WScript.Echo "重連中..."
wshshell.run "rasdial /disconnect", 0, True
wshshell.run "rasdial hinet", 0, True
wscript.sleep SleepInt
Else
Wscript.Quit
End if
End if
Next
End If
Next
if tag = 0 Then
WScript.Sleep 5000
' 若這次沒找到你的ADSL連線(可能上次還沒連成功)
' 停5秒再繼續搜
End if
Wend
Sub CheckStartMode
Dim strStartExe
strStartExe = UCase( Mid( wscript.fullname, _
instrRev(wscript.fullname, "\") + 1 ) )
If Not strStartExe = "CSCRIPT.EXE" Then
set oSh = CreateObject("wscript.shell")
oSh.Run "cscript.exe """ & wscript.scriptfullname
wscript.quit
End If
End Sub
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.133.39
→ cole945:呃..對了.因為我是遠端連回家寫,沒測過 @.@ 應該是不會有 02/22 20:11
→ cole945:問題啦囧 怕測完失敗我就連不到我的電腦了..|| 02/22 20:12
→ winkissimo:程式看起來有用到資料庫嗎?因為有看到Select * From... 02/22 21:20
→ cole945:那是 WMI的東西,WMI Query Language. 利用SQL-like的語法 02/22 21:54
→ cole945:查詢或修改windows上相關的管理資訊~ 02/22 21:54
→ HZYSoft:Cool!!! 原 po 真強,完全不知道有這種鬼東西 = = 02/22 22:00
→ cole945:呃..過獎了|| VB算是最試合用來玩WMI的語言之一吧~ 如果對 02/22 22:06
→ cole945:WMI有興趣的話,小推 WMI Explorer這個小工具~可以用來直接 02/22 22:07
→ cole945:瀏覽系統上的WMI資訊~ 02/22 22:07
→ albb0920:wmi還是現在才知道.... 對了...VBS可以引dll嗎? 02/23 14:13
→ cole945:推文已經開始遠離EZsoft板了 囧 之前研究的結果是vbs不能 02/23 15:24
→ cole945:引用dll(蠻可惜的),不過有看過的作法是,有人寫一個for VBS 02/23 15:24
→ cole945:用來引用dll的COM元件,Create該元件利用它invoke你要的dll 02/23 15:25
→ cole945:過程蠻複雜的,而且已經脫離vbs的便利性與攜帶性~ 不過.NET 02/23 15:26
→ cole945:中很多元件是可以當COM元件用的,所以VBS可以利用.NET帶來 02/23 15:27
→ cole945:的豐富功能,算是另一個可考慮的方向~ 02/23 15:28
推 HZYSoft:VBS 只能用 ActiveX 元件,不然 call Win32 API 啥都能做 02/23 18:37
→ cole945:其實也不是不能用DLL啦~ Windows還有一招 rundll32 可以玩 02/23 19:28
→ cole945:不過EntryPointer的格式有規定,不能想invoke啥就invoke啥~ 02/23 19:29
※ 編輯: cole945 來自: 220.139.149.83 (03/11 22:37)