返回列表 回復 發帖

電腦是否連線

Sorry  此帖發錯區了,請移到VB6

我使用了很多種方法檢查電腦是否連線,但結果都有問題
作業系統:Windows 2000,Windows2003
網路:Hinet ADSL
============================================
Private Declare Function RegCloseKey Lib "ADVAPI32.dll" Alias "RegCloseKey" (ByVal hKey As Long) _
    As Long
Private Declare Function RegOpenKey Lib "ADVAPI32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, _
    ByVal lpSubKey As String, phkResult As Long) As Long
Private 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 Long
  Dim sKey As Long
  Dim sSubKey As String
  Dim sResult As Long
  Dim sValueName As String
  Dim sReserved As Long
  Dim sType As Long
  Dim sData As Long
  Dim lpcbData As Long
  Dim sReturnCode As Long
  TaiActiveConnection = False
  sSubKey = "System\CurrentControlSet\Services\RemoteAccess"
  sReturnCode = RegOpenKey(HKEY_LOCAL_MACHINE, sSubKey, sResult)
  If sReturnCode = ERROR_SUCCESS Then
    sKey = sResult
    sValueName = "Remote Connection"
    sReserved = APINULL
    sType = APINULL
    sData = APINULL
    lpcbData = APINULL
    sReturnCode = RegQueryValueEx(sKey, sValueName, sReserved, sType, ByVal sData, lpcbData)
    lpcbData = Len(sData)
    sReturnCode = RegQueryValueEx(sKey, sValueName, sReserved, sType, sData, lpcbData)
    If sReturnCode = ERROR_SUCCESS Then
      If sData = 0 Then
        ActiveConnection = False
      Else
        ActiveConnection = True
      End If
    End If
    RegCloseKey (sKey)
  End If
結果都是False
==========================================================
Private Declare Function RegCloseKey Lib "ADVAPI32.dll" Alias "RegCloseKey" (ByVal hKey As Long) _
    As Long
Private Declare Function RegOpenKey Lib "ADVAPI32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, _
    ByVal lpSubKey As String, phkResult As Long) As Long
Private 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 Long
  Dim SubKeyH As Long
  Dim MyData As Long
  RegOpenKey &H80000002, "System\CurrentControlSet\Services\RemoteAccess", SubKeyH
  RegQueryValueEx SubKeyH, "Remote Connection", 0, 4, ISConnect, 4
  RegCloseKey SubKeyH
果都是False
==========================================================
Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "InternetGetConnectedStateExA" (lpdwFlags As Long, ByVal lpszConnectionName As String, ByVal dwNameLen As Long, ByVal dwReserved As Long) As Boolean
Public Enum enuInternet_Connection
   Internet_Connection_Modem = 1
   Internet_Connection_Lan = 2
   Internet_Connection_Proxy = 4
   Internet_Connection_Modem_Busy = 8
   Internet_RAS_Installed = &H10&
   Internet_Connection_Offline = &H20&
   Internet_Connection_Configured = &H40&
End Enum

Dim lpdwFlags As enuInternet_Connection
Dim lpString As String
lpString = String(BufferString, 0)

summy = InternetGetConnectedStateEx(lpdwFlags, lpString, BufferString, 0)
myInternetGetConnectedStateEx = Left(lpString, InStr(lpString, Chr(0) & Chr(0)) - 1)

結果都是LAN 連線

[ 本帖最後由 頭大的人 於 2007-12-21 20:55 編輯 ]
網路上一堆人在討論有關InternetGetConnectedState返回值不準確的問題
以下這篇是比較完整的解答
http://www.kpwang.com/vb/110664131138.htm
又花了3個鐘頭從網路上找範例

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


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


這個使用RAS方法
但我的電腦還是 False(未連接)
請各位高手試試看
如果你們能成功的話,那可能是我的Norton Internet Security 2006把網路資訊隱藏了
這些方法我早就試過了
現在只想知道各位有沒有人使用我貼上的程式
我想知道你們的結果如何?

如果可用的話,那就是我的Norton 的問題
而不是程式的問題了
返回列表 回復 發帖