function GetOnlineStatus : Boolean;
var ConTypes : Integer;
begin
ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
if (InternetGetConnectedState(@ConTypes, 0) = False) then Result := False else Result := True;
end;
var ConTypes : Integer;
begin
ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
if (InternetGetConnectedState(@ConTypes, 0) = False) then Result := False else Result := True;
end;
解决方案 »
- VB 导出到 excel
- vb 连续导出EXCEL表问题 第一次可以保存,第二次在保存语句报“远程服务器不存在或不能使用”错误。求高手指教~~~,代码如下
- 请问我有一个字符串怎么让打印机打印出来?
- 关于WMI
- 获得listbox中项目内容的问题
- 请问怎么把几个txt文件合并成一个文件,急!!!!在线等待
- 请问我用winsock与服务器连接后,如何能获得服务器端的相对应目录
- 请问VB有没有可能使用VC开发的静态库?
- 如何在一个窗体的OLE控件内播放一个flash动画,不是另开窗口播放!谢谢!
- vb6请问用什么控件可以调用 Google Chrome 或者任何一套HTML5 浏览器 都可以
- 不使用数据控件,OLE控件如何读取数据库中的记录??
- 关于split
改建值,试试看
Private Const ERROR_SUCCESS = 0&
Private Const APINULL = 0&
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private ReturnCode As Long
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As LongPublic Function ActiveConnection() As Boolean
Dim hKey As Long
Dim lpSubKey As String
Dim phkResult As Long
Dim lpValueName As String
Dim lpReserved As Long
Dim lpType As Long
Dim lpData As Long
Dim lpcbData As Long
ActiveConnection = False
lpSubKey = "System\CurrentControlSet\Services\RemoteAccess"
ReturnCode = RegOpenKey(HKEY_LOCAL_MACHINE, lpSubKey, phkResult)
If ReturnCode = ERROR_SUCCESS Then
hKey = phkResult
lpValueName = "Remote Connection"
lpReserved = APINULL
lpType = APINULL
lpData = APINULL
lpcbData = APINULL
ReturnCode = RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, ByVal lpData, lpcbData)
lpcbData = Len(lpData)
ReturnCode = RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData)
If ReturnCode = ERROR_SUCCESS Then
If lpData = 0 Then
ActiveConnection = False
Else
ActiveConnection = True
End If
End If
RegCloseKey (hKey)
End If
End Function
----------
判断结果:
SUB FORM_LOAD()
If ActiveConnection = True Then
Call MsgBox("现在处于链结状态。", vbInformation)
Else
Call MsgBox("现在处于断开状态。", vbInformation)
End If
END SUB
代码如下,不过要给分啊!^_^
Option Explicit
'检测本机是否联入互联网,以及以什么形式联入Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" _
Alias "InternetGetConnectedStateExA" _
(ByRef lpdwFlags As Long, _
ByVal lpszConnectionName As String, _
ByVal dwNameLen As Long, _
ByVal dwReserved As Long _
) As LongPrivate Enum EIGCInternetConnectionState
INTERNET_CONNECTION_MODEM = &H1&
INTERNET_CONNECTION_LAN = &H2&
INTERNET_CONNECTION_PROXY = &H4&
INTERNET_RAS_INSTALLED = &H10&
INTERNET_CONNECTION_OFFLINE = &H20&
INTERNET_CONNECTION_CONFIGURED = &H40&
End EnumPrivate Function InternetConnected(Optional ByRef eConnectionInfo _
As EIGCInternetConnectionState, Optional ByRef _
sConnectionName As String) As Boolean
Dim dwFlags As Long
Dim sNameBuf As String
Dim lR As Long
Dim iPos As Long
On Error Resume Next
sNameBuf = String$(513, 0)
lR = InternetGetConnectedStateEx(dwFlags, sNameBuf, 512, 0&)
eConnectionInfo = dwFlags
iPos = InStr(sNameBuf, vbNullChar)
If iPos > 0 Then
sConnectionName = Left$(sNameBuf, iPos - 1)
ElseIf Not sNameBuf = String$(513, 0) Then
sConnectionName = sNameBuf
End If
InternetConnected = (lR = 1)
End FunctionPublic Function IsInNet() As Boolean '检测是否已经以及使用什么方法连接到Internet
Dim bConnected As Boolean
Dim eR As Long
Dim sName As String
Dim sMsg As String
bConnected = InternetConnected(eR, sName) '根据获得的结果输出
' If (eR And INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM Then
' sMsg = sMsg & "使用modem连接到Internet."
' End If
'
' If (eR And INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN Then
' sMsg = sMsg & "使用内部网连接到Internet."
' End If
'
' If (eR And INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY Then
' sMsg = sMsg & "通过代理服务器连接到Internet."
' End If
'
' If (eR And INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE Then
' sMsg = sMsg & "现在连接处于离线状态."
' End If
'
' If (eR And INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED Then
' sMsg = sMsg & "连接已经被设定."
' Else
' sMsg = sMsg & "没有设定好的连接."
' End If
'
' If (eR And INTERNET_RAS_INSTALLED) = INTERNET_RAS_INSTALLED Then
' sMsg = sMsg & "本机已经安装了远程访问服务功能."
' End If
IsInNet = bConnected
End Function如果直接调用,可以通过返回值判断是否联网;如果将其中的注释去掉,还可以得到连网的种类等详细信息。酷吧?
我试了你的代码,却是不行,
我拔不拔网线返回结果都是true;
如果你的代码真的可以,我会给你分的!
对了,我上网是通过代理,ADSL上Internet!
哇!生活果真不一样啦,这么多人用ADSL! 嗨,我的这段代码就是不能识别ADSL,但是又有什么关系呢?如果你用金山毒霸你会发现,有时候他连局域网都分不清!我也给我公司的产品做过一个类似的升级程序,用的就是这段代码,虽然有可能判断失误,但只要给用户一个选择不就可以了吗? 不知道你的程序是干什么用的,只以我见过的而言,要想100%确定是否联网,只有通过PING的方法实现(其实这也不一定,虽能保证PING的地址一定会被本机设置的DNS包含呢?就象我公司用的网通,国内外的很多地址都不能PING到,而实际确实存在)。 如果你有更好的方法,说一声!
你说不能识辨ADSL
但是如果我把网线拔了,那返回的结果应该是false吧
很不辛的是仍是true
你碰到过这种情况吗?
声明: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 Long
Public Const RAS95_MaxEntryName = 256
Public Const RAS95_MaxDeviceType = 16
Public Const RAS95_MaxDeviceName = 32
Public Type RASCONN95
dwSize As Long
hRasCon As Long
szEntryName(RAS95_MaxEntryName) As Byte
szDeviceType(RAS95_MaxDeviceType) As Byte
szDeviceName(RAS95_MaxDeviceName) As Byte
End Type
Public Type RASCONNSTATUS95
dwSize As Long
RasConnState As Long
dwError As Long
szDeviceType(RAS95_MaxDeviceType) As Byte
szDeviceName(RAS95_MaxDeviceName) As Byte
End Type程序:
Private Sub main()
If IsConnected = True Then
MsgBox "已连接到Internet!", vbInformation, "提示"
Else
MsgBox "未连接到Internet!", vbInformation, "提示"
End If
End Sub
Public Function IsConnected() As Boolean
Dim TRasCon(255) As RASCONN95
Dim lg As Long
Dim lpcon As Long
Dim RetVal As Long
Dim Tstatus As RASCONNSTATUS95
'
TRasCon(0).dwSize = 412
lg = 256 * TRasCon(0).dwSize
'
RetVal = RasEnumConnections(TRasCon(0), lg, lpcon)
If RetVal <> 0 Then
MsgBox "产生错误!", vbInformation, "提示"
Exit Function
End If
'
Tstatus.dwSize = 160
RetVal = RasGetConnectStatus(TRasCon(0).hRasCon, Tstatus)
If Tstatus.RasConnState = &H2000 Then
IsConnected = True
Else
IsConnected = False
End If
End Function
我想应该这样说: 如果要想完全判断正确,要么自己写有关的底层代码,---我想这不是VB能实现的;要么... 有必要完全正确的判断么? 要知道,微软提供的函数就是这些,没有针对ADSL状态的(至少我这么认为),当然不会返回正确的值了。 另外,如果你见过有能够完全判断正确的软件,通知我一声。
你的也不行!
to uguess(uguess):
虽然没有解决我的问题,不过还是非常感谢你的参与!
对于判断的正确性有误必要,我想是完全有必要的,
如果告诉你的客户的是虚假信息,那就说明这个软件有很大的bug了!
明知有bug,难道不去纠正吗?
我想,这不算是“虚假信息”吧? 更何况现在的新技术层出不穷,你能保证你的程序能认识所有的方式么?就象很久以前做的WINDOWS版本检测程序,以前只能检测到95、98、2000、NT,对于新出来的XP能用么?你能说这是BUG么?你能说检测错误是欺骗客户么? 对,如果在程序中加入有关XP版本的检测,就能用了,但别忘了,这是基于微软提供了这方面函数的基础上实现的,假如微软不再提供这方面的函数,不知阁下会怎么办?
还是我那句话:有必要完全正确的判断么?
另外:这个能算BUG么? 要知道你的软件是基于WINDOWS上的,连他都不提供判断的方法,这能算你的程序的BUG么?
同意moonfish(moonfish)的看法:“如果告诉你的客户的是虚假信息,那就说明这个软件有很大的bug了!
明知有bug,难道不去纠正吗?”
判断ip地质还有,ping 一台主机!!!