请问用什么方法(或者控件)可以检测 是否已经连接到网络(Internet)?谢谢了!!!急!
解决方案 »
- 大哥大姐来帮帮忙!VB中关于自定义坐标系画图的问题!
- 如何用程序实现Excel表格按要求将其中的内容分类,保存到新的表中,并使每个新的分类均生成一个sheet保存?
- 在使用windows mediaplayer控件播放时怎样抓屏
- 求教关于SStab控件的问题?
- 关于DLL的简单问题
- 怎样让一个函数返回字符串数组类型?在线等
- 如何通过书签将数据库中相应内容写入word中的指定位置
- 请教:在VB中如何连接Sybase数据库
- vb用ado的recordset记录集访问数据库,经过查询后的数据如何返回到datagrid表中(速答速给分)
- 源代码加密是怎么做到的?我这里有方成进销存的源代码,但是加密的...
- 高价求购---QQ最新版本通信协议
- 通过VB6向EXCEL2000中写入数据,请高手指教。
Private Const IP_STATUS_BASE As Long = 11000
Private Const IP_BUF_TOO_SMALL As Long = (11000 + 1)
Private Const IP_DEST_NET_UNREACHABLE As Long = (11000 + 2)
Private Const IP_DEST_HOST_UNREACHABLE As Long = (11000 + 3)
Private Const IP_DEST_PROT_UNREACHABLE As Long = (11000 + 4)
Private Const IP_DEST_PORT_UNREACHABLE As Long = (11000 + 5)
Private Const IP_NO_RESOURCES As Long = (11000 + 6)
Private Const IP_BAD_OPTION As Long = (11000 + 7)
Private Const IP_HW_ERROR As Long = (11000 + 8)
Private Const IP_PACKET_TOO_BIG As Long = (11000 + 9)
Private Const IP_REQ_TIMED_OUT As Long = (11000 + 10)
Private Const IP_BAD_REQ As Long = (11000 + 11)
Private Const IP_BAD_ROUTE As Long = (11000 + 12)
Private Const IP_TTL_EXPIRED_TRANSIT As Long = (11000 + 13)
Private Const IP_TTL_EXPIRED_REASSEM As Long = (11000 + 14)
Private Const IP_PARAM_PROBLEM As Long = (11000 + 15)
Private Const IP_SOURCE_QUENCH As Long = (11000 + 16)
Private Const IP_OPTION_TOO_BIG As Long = (11000 + 17)
Private Const IP_BAD_DESTINATION As Long = (11000 + 18)
Private Const IP_ADDR_DELETED As Long = (11000 + 19)
Private Const IP_SPEC_MTU_CHANGE As Long = (11000 + 20)
Private Const IP_MTU_CHANGE As Long = (11000 + 21)
Private Const IP_UNLOAD As Long = (11000 + 22)
Private Const IP_ADDR_ADDED As Long = (11000 + 23)
Private Const IP_GENERAL_FAILURE As Long = (11000 + 50)
Private Const MAX_IP_STATUS As Long = (11000 + 50)
Private Const IP_PENDING As Long = (11000 + 255)
Private Const PING_TIMEOUT As Long = 500
Private Const WS_VERSION_REQD As Long = &H101
Private Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Const INADDR_NONE As Long = &HFFFFFFFF
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128Public PingTime As Long
Private Type ICMP_OPTIONS
Ttl As Byte
Tos As Byte
Flags As Byte
OptionsSize As Byte
OptionsData As Long
End TypePrivate Type ICMP_ECHO_REPLY
Address As Long
status As Long
RoundTripTime As Long
DataSize As Long
DataPointer As Long
Options As ICMP_OPTIONS
Data As String * 250
End TypePrivate Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Long
wMaxUDPDG As Long
dwVendorInfo As Long
End TypePublic Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Declare Function WSAStartup Lib "wsock32" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "wsock32" () As Long
Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long
Private Declare Function inet_addr Lib "wsock32" (ByVal s As String) As Long
Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Long, ByVal RequestOptions As Long, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, ByVal Timeout As Long) As Long
Private Function GetStatusCode(status As Long) As String
On Error GoTo ErrLine
Dim Msg As String
GetStatusCode = ""
Select Case status
Case IP_SUCCESS: Msg = "ip success"
Case INADDR_NONE: Msg = "inet_addr: bad IP format"
Case IP_BUF_TOO_SMALL: Msg = "ip buf too_small"
Case IP_DEST_NET_UNREACHABLE: Msg = "ip dest net unreachable"
Case IP_DEST_HOST_UNREACHABLE: Msg = "ip dest host unreachable"
Case IP_DEST_PROT_UNREACHABLE: Msg = "ip dest port unreachable"
Case IP_DEST_PORT_UNREACHABLE: Msg = "ip dest port unreachable"
Case IP_NO_RESOURCES: Msg = "ip no resources"
Case IP_BAD_OPTION: Msg = "ip bad option"
Case IP_HW_ERROR: Msg = "ip hw_error"
Case IP_PACKET_TOO_BIG: Msg = "ip packet too_big"
Case IP_REQ_TIMED_OUT: Msg = "ip req timed out"
Case IP_BAD_REQ: Msg = "ip bad req"
Case IP_BAD_ROUTE: Msg = "ip bad route"
Case IP_TTL_EXPIRED_TRANSIT: Msg = "ip ttl expired transit"
Case IP_TTL_EXPIRED_REASSEM: Msg = "ip ttl expired reassem"
Case IP_PARAM_PROBLEM: Msg = "ip param_problem"
Case IP_SOURCE_QUENCH: Msg = "ip source quench"
Case IP_OPTION_TOO_BIG: Msg = "ip option too_big"
Case IP_BAD_DESTINATION: Msg = "ip bad destination"
Case IP_ADDR_DELETED: Msg = "ip addr deleted"
Case IP_SPEC_MTU_CHANGE: Msg = "ip spec mtu change"
Case IP_MTU_CHANGE: Msg = "ip mtu_change"
Case IP_UNLOAD: Msg = "ip unload"
Case IP_ADDR_ADDED: Msg = "ip addr added"
Case IP_GENERAL_FAILURE: Msg = "ip general failure"
Case IP_PENDING: Msg = "ip pending"
Case PING_TIMEOUT: Msg = "ping timeout"
Case Else: Msg = "unknown msg returned"
End Select
GetStatusCode = Msg
Exit Function
ErrLine:
End FunctionPrivate Function Ping(sAddress As String, sDataToSend As String, ECHO As ICMP_ECHO_REPLY) As Long
On Error GoTo ErrLine
Dim hPort As Long
Dim dwAddress As Long
dwAddress = inet_addr(sAddress)
If dwAddress <> INADDR_NONE Then
hPort = IcmpCreateFile()
If hPort Then
Call IcmpSendEcho(hPort, dwAddress, sDataToSend, Len(sDataToSend), 0, ECHO, Len(ECHO), PING_TIMEOUT)
Ping = ECHO.status
Call IcmpCloseHandle(hPort)
End If
Else
Ping = INADDR_NONE
End If
Exit Function
ErrLine:
Ping = INADDR_NONE
End FunctionPublic Function PingIP(ByVal szIp As String) As Boolean
On Error GoTo ErrLine
Dim WSAD As WSADATA
Dim ECHO As ICMP_ECHO_REPLY
Dim ret As Long
Delay 150
PingIP = False
PingTime = Empty
If WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS Then
ret = Ping(Trim(szIp), "tanaya", ECHO)
PingTime = ECHO.RoundTripTime
If InStr(1, GetStatusCode(ret), "success") <> 0 Then
WSACleanup
PingIP = True
PingTime = ECHO.RoundTripTime
Exit Function
End If
End If
Exit Function
ErrLine:
End FunctionPrivate Function Delay(MSceond As Long)
Dim I As Long
If MSceond < 5 Then Exit Function
I = timeGetTime
Do While timeGetTime - I < MSceond
DoEvents
Loop
End Function可以把上面的这一段放在一个模块里面去。在窗体中放一个按钮,调用测试:
sub command1_click
if PingIp("202.94.14.23") then
msgbox"Connected, Pingtime:" & PingTime
else
Msgbox"Disconnect"
end if
end sub
Dim Ret As Long
If IsNetworkAlive(Ret) = 0 Then
MsgBox "无网络连接"
Else
MsgBox "网络连接"
End If
End Sub
Public Declare Function RasEnumConnections Lib "RasApi32.dll" Alias "RasEnumConnectionsA" (lpRasCon As Any, lpcb As Long, lpcConnections As Long) As Long
Public Declare Function RasGetConnectStatus Lib "RasApi32.dll" Alias "RasGetConnectStatusA" (ByVal hRasCon As Long, lpStatus As Any) As LongPublic Const RAS95_MaxEntryName = 256Public Const RAS95_MaxDeviceType = 16Public Const RAS95_MaxDeviceName = 32Public Type RASCONN95dwSize As LonghRasCon As LongszEntryName(RAS95_MaxEntryName) As ByteszDeviceType(RAS95_MaxDeviceType) As ByteszDeviceName(RAS95_MaxDeviceName) As ByteEnd TypePublic Type RASCONNSTATUS95dwSize As LongRasConnState As LongdwError As LongszDeviceType(RAS95_MaxDeviceType) As ByteszDeviceName(RAS95_MaxDeviceName) As ByteEnd Type
Public Function isdial() As Boolean
Dim TRasCon(255) As RASCONN95Dim lg As LongDim lpcon As LongDim RetVal As LongDim Tstatus As RASCONNSTATUS95'TRasCon(0).dwSize = 412lg = 256 * TRasCon(0).dwSize'RetVal = RasEnumConnections(TRasCon(0), lg, lpcon)If RetVal <> 0 ThenMsgBox "产生错误!", vbInformation, "提示"Exit FunctionEnd If
'Tstatus.dwSize = 160RetVal = RasGetConnectStatus(TRasCon(0).hRasCon, Tstatus)If Tstatus.RasConnState = &H2000 Then
isdial = True
Else
isdial = False
End If
End Function
Function checkadsl()
If isdial Then
MsgBox "已连接到Internet!", vbInformation, "提示"
Else
MsgBox "未连接到Internet!", vbInformation, "提示"
End If
End Function
Private Declare Function IsNetworkAlive Lib "SENSAPI.DLL" (Optional ByRef lpdwFlags As Long) As Long
Private Sub Command1_Click()
If IsNetworkAlive() = 0 Then
MsgBox "无网络连接"
Else
MsgBox "网络连接"
End If
End Sub
(ByRef lpdwFlags As Long, ByVal dwReserved As Long) As LongPublic Function IsNetConnectOnline() As Boolean IsNetConnectOnline = InternetGetConnectedState(0&, 0&)
End Function准备接分!
第一种最长的方法是最有效的,因为他通过PING来实现,可是,用来做测试的202.94.14.23,出现的是Reply from 210.74.176.246: TTL expired in transit.可是MSG返回的不是IP_SUCCESS,所以仍然出现Disconnect,可以使用SINA的61.172.201.14做测试。或者通过PingTime来判断。感谢WallesCai(最奢侈的事就是睡觉了,偶好想睡觉哦.女朋友可以不找,饭可以不吃,偶把时间都换成睡眠吧.)
chewinggum(口香糖·把减肥列入下一个五年计划)
xiaoyaolz(逍遥浪子)的简单方法
采用直接使用API,但是我发现,当连接网络后,再断网,仍然会显示Connect,所以有一点问题。
另外, xiaoyaolz(逍遥浪子)提供了另外一种方法,好象对我并不适用,因为不是ADSL!
再次感谢WallesCai (5)、 chewinggum (5)、 xiaoyaolz (5)、 zhhlong (5)、 的帮助!:)