我將書中所使用的InternetGetConnectedState的方式(書中範例),進行個人電腦的測試,發現可以測得是否透過lan連線等資訊,且正在online狀態,但是我將網路現拔掉,再執行一次,結果卻與電腦連線時的狀態相同(顯示online),不論是否關閉程式重新執行皆然. 覺得很奇怪的是,為何該方法在網路線拔掉後,還會出現online,如此不是得到錯誤的資訊了嗎. 我將程式碼貼在下方,請各位前輩指教.
另外,在紀大哥的網站上有提供api的模組範例,但那是針對internet,如果將位置改成intranet(網域內)則無法使用,不知道有無方法可以獲知本機連線狀態,還是只能用ping的方法再去一個一個解呢?
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
Private Const INTERNET_CONNECTION_MODEM = &H1
Private Const INTERNET_CONNECTION_LAN = &H2
Private Const INTERNET_CONNECTION_PROXY = &H4
Private Const INTERNET_RAS_INSTALLED = &H10
Private Const INTERNET_CONNECTION_MODEM_BUSY = &H8
Private Const INTERNET_CONNECTION_OFFLONE = &H20
Private Sub CmdCheck_Click()
txtStatus(0).Text = IsConnectViaModem
  txtStatus(1).Text = IsConnectViaLan
  txtStatus(2).Text = IsConnectViaProxy
  txtStatus(3).Text = IsRASInstalled
  txtStatus(4).Text = IsRASBusy
  txtStatus(5).Text = IsConnectOffline
  txtStatus(6).Text = IsConnectOnline
End Sub
Private Function IsConnectViaModem() As Boolean
Dim lngFlag As Long
  Call InternetGetConnectedState(lngFlag, 0)
  IsConnectViaModem = lngFlag And INTERNET_CONNECTION_MODEM
End Function
Private Function IsConnectViaLan() As Boolean
Dim lngFlag As Long
  Call InternetGetConnectedState(lngFlag, 0)
  IsConnectViaLan = lngFlag And INTERNET_CONNECTION_LAN
End Function
Private Function IsConnectViaProxy() As Boolean
Dim lngFlag As Long
  Call InternetGetConnectedState(lngFlag, 0)
  IsConnectViaProxy = lngFlag And INTERNET_CONNECTION_PROXY
End Function
Private Function IsRASInstalled() As Boolean
Dim lngFlag As Long
  Call InternetGetConnectedState(lngFlag, 0)
  IsRASInstalled = lngFlag And INTERNET_RAS_INSTALLED
End Function
Private Function IsRASBusy() As Boolean
Dim lngFlag As Long
  Call InternetGetConnectedState(lngFlag, 0)
  IsRASBusy = lngFlag And INTERNET_CONNECTION_MODEM_BUSY
End Function
Private Function IsConnectOffline() As Boolean
Dim lngFlag As Long
  Call InternetGetConnectedState(lngFlag, 0)
  IsConnectOffline = lngFlag And INTERNET_CONNECTION_OFFLONE
End Function
Private Function IsConnectOnline() As Boolean
IsConnectOnline = InternetGetConnectedState(0, 0)
End Function
arrow
arrow
    全站熱搜

    vbqa 發表在 痞客邦 留言(3) 人氣()