我想在软件中可以自动判断软件是否需要更新,我定时检测有无新的版本,但在XP中我到网站检测,如果此时不能上网,就自动调出拨号连接,如何解决??

解决方案 »

  1.   

    调用系统默认拨号程序
    ====================
    Option Explicit
    '有关注册的API声明
    Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal szData As String, ByRef lpcbData As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
    '常数
    Const HKEY_CURRENT_USER = &H80000001
    Const ERROR_SUCCESS = 0&
         
    Private Sub cmdCallConnect_Click()
    '启动默认拨号连接
    Shell "rundll rnaui.dll,RnaDial " + GetConnect, vbNormalFocus
    End Sub
         
    Public Function GetConnect() As String
    Dim hKey As Long
    Dim SubKey As String
    hKey = HKEY_CURRENT_USER  '主键
    SubKey = "RemoteAccess"   '子键
    '取得默认连接名
    GetConnect = GetRegValue(hKey, SubKey, "Default")
    End FunctionPublic Function GetRegValue(hKey As Long, lpszSubKey As String, szKey As String) As Variant
    On Error GoTo ErrorRoutineErr:
    Dim phkResult As Long
    Dim lResult As Long
    Dim szBuffer As String
    Dim lBuffSize As Long
    '创建缓冲区
    szBuffer = Space(255)
    lBuffSize = Len(szBuffer)
    '打开注册键
    RegOpenKeyEx hKey, lpszSubKey, 0, 1, phkResult
    '查询结果
    lResult = RegQueryValueEx(phkResult, szKey, 0, 0, szBuffer, lBuffSize)
    '关闭注册键
    RegCloseKey phkResult
    '返回结果
    If lResult = ERROR_SUCCESS Then
    GetRegValue = Left(szBuffer, lBuffSize - 1)
    Else
    GetRegValue = ""
    End If
    Exit Function
    ErrorRoutineErr:
    GetRegValue = ""
    End Function
    ============================
    显示拨号网络中的每一个链接名
    Private Const RAS_MaxDeviceType = 16
    Private Const RAS95_MaxDeviceName = 128
    Private Const RAS95_MaxEntryName = 256
    Private Type RASCONN95
    dwSize As Long
    hRasConn As Long
    szEntryName(RAS95_MaxEntryName) As Byte
    szDeviceType(RAS_MaxDeviceType) As Byte
    szDeviceName(RAS95_MaxDeviceName) As Byte
    End Type
    Private Type RASENTRYNAME95
    dwSize As Long
    szEntryName(RAS95_MaxEntryName) As Byte
    End Type
    Private Declare Function RasEnumConnections Lib "RasApi32.DLL" Alias "RasEnumConnectionsA" (lprasconn As Any, lpcb As Long, lpcConnections As Long) As Long
    Private Declare Function RasEnumEntries Lib "RasApi32.DLL" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long
    Private Declare Function RasHangUp Lib "rasapi32.dll" Alias _
    "RasHangUpA" (ByVal hRasConn As Long) As Long在Form上放一个ListBox或者ComboBox,然后在Form_Load中写入以下代码把当前可用的拨号连接名称加进去,这里我们使用ListBox。Private Sub Form_Load()
        Dim s As Long, l As Long, ln As Long, a$
        ReDim R(255) As RASENTRYNAME95    R(0).dwSize = 264
        s = 256 * R(0).dwSize
        l = RasEnumEntries(vbNullString, vbNullString, R(0), s, ln)
        For l = 0 To ln - 1
            a$ = StrConv(R(l).szEntryName(), vbUnicode)
            List1.AddItem Left$(a$, InStr(a$, Chr$(0)) - 1)
        Next
        List1.ListIndex = 0
    End Sub
      

  2.   

    单纯检测是否在线
    Private Declare Function InetIsOffline Lib "url.dll" (ByVal dwFlags As Long) As LongPrivate Sub Form_Load()
        Timer1.Interval = 1
    End SubPrivate Sub Timer1_Timer()
        Me.Caption = IIf(InetIsOffline(0&), "离线", "在线")
    End Sub
      

  3.   

    先谢谢  BlueBeer(1win) 误会了 我是怕XP 自动调出拨号连接 想屏蔽 呵呵 说的不清楚
    先试检测是否在线 
    马上回来送分 呵呵
      

  4.   

    兄弟嘴拙,没说清楚
    就是我的软件想有自动update功能 
    如果用户能上网呢 我就到我的网站上去看有无最新的版本 有则自动升级
    要是用户不能上网呢 就不用企图登陆我的网站了
    在Win2k下 用户不能上网,登陆网站就错误 我忽略就可以了
    但在XP下,却调出自动拨号的窗口 由于我是定时检测 所以总是调出 很烦的
    BlueBeer(1win) 老兄 怎么我断开了 还是检测成在线啊 我在Win2K下
      

  5.   

    BlueBeer(1win) 老兄的方法不太行 但仍然感谢各位兄弟 
    结贴