用GetInternetConnectedState()函数,具体参见MSDN中关于InternetAPI部分。使用时须连接到winint.lib(具体我记不得了)不过上次我用VC遍了一个上网记费的工具,使用这个函数好象在Win98下不起作用,在Win2000下正常。不知为何,烦请大虾指点迷津。

解决方案 »

  1.   

    Win98下的InternetConnectedState系列函数有问题(M$自己承认的)你看看这段代码,肯定没错,呵呵
    Public Function IsConnected() As Boolean
    Dim hKey As Long, lpSubKey As String, phkResult As Long, lpValueName As String, lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long, hResult As Long
    IsConnected = False
    lpSubKey = "System\CurrentControlSet\Services\RemoteAccess"
    hKey = RegOpenKey(HKEY_LOCAL_MACHINE, lpSubKey, phkResult)If hKey = ERROR_SUCCESS Then
        hKey = phkResult
        lpValueName = "Remote Connection"
        lpReserved = APINULL
        lpType = APINULL
        lpData = APINULL
        lpcbData = APINULL
        hResult = RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, ByVal lpData, lpcbData)
        lpcbData = Len(lpData)
        hResult = RegQueryValueEx(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData)
        If hResult = ERROR_SUCCESS Then
            If lpData = 0 Then
                IsConnected = False
            Else
                IsConnected = True
            End If
        End If
    End If
    End Function
      

  2.   

    RasEnumEntries()
    RasGetEntryDialParams()
    ...
      

  3.   

    codewarrior,使用时须连接到winint.lib。写错了,是wininet.lib
      

  4.   

    Chice老兄,读注册表的方法可以吗?
    好像"System\CurrentControlSet\Services\RemoteAccess"这个键下面根本没有"Remote Connection"这个值名啊???怎么RegQueryValueEx?
        一般的方法似乎应该是:用RasEnumConnections枚举所有Ras连接,如果至少有一个连接再用RasGetConnectStatus得到连接状态,来判断连接是否有效吧?实现实时检测当然用定时器。
         这是我近日看Msdn的结论,定有断章取义之处,还有人指点吗?还有,大家说的有问题的几个API是指这几个Ras函数么? 待我写出IsConnected()函数试试.......
      

  5.   

    会思考的草、Chice兄台…………无语中?
      

  6.   

    哈哈,sorry,看我这把年纪,把函数库名字记错了。我回去又实验了一下,GetInternetConnectedState()函数好象是的确在win98下无效,在win2k下有效,??我不知道why。看来还是用RAS函数比较好吧。