如果其他的也可以的话也不错,比如tapi函数。关键是不能调用windows自带的拨号程序,不过如果可以把它隐藏掉,而且可以让我知道它的拨号状态的话也可以。谢谢!
还有一个问题,如何得到各个windows版本的windows media player的位置以及它的文件名?从注册表中可以吗?如何取得?谢谢!

解决方案 »

  1.   

    我刚做了一个拨号程序,是用API拨号的,在2000里可以隐藏掉.
      

  2.   

    RAS API上的其他Function:
    取得目前连线资讯
        Function GetAllConnects(ConnEntry() as RASCONN) As Long
           传回值:总共连线数
           使用方式 :
           Dim Conn() AS RASCONN
           Dim icnt as Long
           icnt = GetAllConnects(Conn())取得所有拨号网路Entry的资讯(不管有没有连线)
        Function GetRasNameEntries(Entry() As RASENTRYNAME, _
                                   Optional PhonePath As String) As Long
     传回值:总共Entry数
           使用方式 :
           Dim Conn() AS RASENTRYNAME
           Dim icnt as Long
           icnt = GetRasNameEntries(Conn())呼叫修改某一个连线Entry 的Window
        Sub EditEntry(ByVal EntryName As String, _
                      Optional ByVal PhonePath As String)
    於拨号网路中新增一个Entry
        Sub CreateEntry(Optional ByVal PhonePath As String)
    自动拨接
        Function DialUp(ByVal EntryName As String, ByVal UserN As String, _
              ByVal Pwd As String, Optional ByVal PhonePath As String) As Long
    取消拨接
         Function HangUp(ByVal hconn As Long) As Boolean
           hconn的值来自於
           1.DialUp()的传回值
           2.GetAllConnects() RASCONN结构叁数中的hRasConn值取得连线状态
         Function GetConnectStatus(ByVal hocnn As Long) As Long
           hconn的值来自於
           1.DialUp()的传回值
           2.GetAllConnects() RASCONN结构叁数中的hRasConn值
      

  3.   

    一个模块:
    'Below is in rasapi.bas
    Public Const RAS_MaxEntryName = 256
    Public Const RAS_MaxDeviceName = 128
    Public Const RAS_MaxDeviceType = 16
    Public Const RAS_MaxPhoneNumber = 128
    Public Const RAS_MaxCallbackNumber = 128
    Public Const UNLEN = 256
    Public Const PWLEN = 256
    Public Const DNLEN = 15
    Public Const ERROR_INVALID_HANDLE = 6Type RASCONN
       dwSize As Long '412
       hRasConn As Long
       szEntryName(RAS_MaxEntryName) As Byte
       szDeviceType(RAS_MaxDeviceType) As Byte
       szDeviceName(RAS_MaxDeviceName) As Byte
    End TypeType RASENTRYNAME
      dwSize As Long '264
      szEntryName(RAS_MaxEntryName) As Byte
    End TypeType RASDIALPARAMS
      dwSize As Long '1052
      szEntryName(RAS_MaxEntryName) As Byte
      szPhoneNumber(RAS_MaxPhoneNumber) As Byte
      szCallbackNumber(RAS_MaxCallbackNumber) As Byte
      szUserName(UNLEN) As Byte
      szPassword(PWLEN) As Byte
      szDomain(DNLEN) As Byte
    End Type
    Type RASCONNSTATUS
        dwSize As Long  '144
        RasConnState As Long
        dwError As Long
        szDeviceType(RAS_MaxDeviceType) As Byte
        szDeviceName(RAS_MaxDeviceName) As Byte
    End Type
    Declare Function RasDial Lib "rasapi32" _
      Alias "RasDialA" (DialExt As Long, ByVal lpPhoneBook As String, _
      RasDialParam As RASDIALPARAMS, ByVal NotifyType As Long, _
      ByVal Notifter As Long, hRasConn As Long) As Long
    Declare Function RasCreatePhonebookEntry Lib "rasapi32" _
      Alias "RasCreatePhonebookEntryA" (ByVal hWnd As Long, ByVal lpPhoneBook As String) As Long
    Declare Function RasEditPhonebookEntry Lib "rasapi32" _
      Alias "RasEditPhonebookEntryA" (ByVal hWnd As Long, ByVal lpPhoneBook As String, _
      ByVal lpEntryName As String) As Long
    Declare Function RasGetErrorString Lib "rasapi32" _
      Alias "RasGetErrorStringA" (ByVal ErrValue As Long, ByVal lpErrStr As String, _
      ByVal cSize As Long) As Long
    Declare Function RasEnumEntries& Lib "rasapi32" _
      Alias "RasEnumEntriesA" (ByVal res As String, ByVal lpszPhonebook As String, _
      lpRasEntryBuffer As Any, lpcb As Long, lpcEntries As Long)
    Declare Function RasEnumConnections Lib "rasapi32" Alias _
          "RasEnumConnectionsA" (lprasconn As Any, _
           lpcb As Long, lpConnect As Long) As Long
    Declare Function RasHangUp Lib "rasapi32" Alias _
          "RasHangUpA" (ByVal hRasConn As Long) As Long
    Declare Function RasGetConnectStatus Lib "rasapi32" Alias _
          "RasGetConnectStatusA" (ByVal hRasConn As Long, _
          lprasconnstatus As RASCONNSTATUS) As Long
    Declare Function RasGetEntryDialParams Lib "rasapi32" _
       Alias "RasGetEntryDialParamsA" (ByVal lpszPhonebook As String, _
       lpRasDialParams As RASDIALPARAMS, _
       lpfPassword As Byte) As Long
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Enum RasConnState
        RASCS_OpenPort = 0
        RASCS_PortOpened             '1
        RASCS_ConnectDevice          '2
        RASCS_DeviceConnected        '3
        RASCS_AllDevicesConnected    '4
        RASCS_Authenticate           '5
        RASCS_AuthNotify             '6
        RASCS_AuthRetry
        RASCS_AuthCallback
        RASCS_AuthChangePassword
        RASCS_AuthProject
        RASCS_AuthLinkSpeed
        RASCS_AuthAck
        RASCS_ReAuthenticate
        RASCS_Authenticated
        RASCS_PrepareForCallback
        RASCS_WaitForModemReset
        RASCS_WaitForCallback
        RASCS_Projected
        RASCS_StartAuthentication  '19
        RASCS_CallbackComplete
        RASCS_LogonNetwork         '21
        RASCS_Interactive = &H1000
        RASCS_RetryAuthentication
        RASCS_CallbackSetByCaller
        RASCS_PasswordExpired
        RASCS_Connected = &H2000
        RASCS_Disconnected
    End Enum
    '取得目前连线资讯
    Public Function GetAllConnections(Conn() As RASCONN) As Long
        Dim dl&, size&, validConnection&, counter%
        ReDim Conn(0)
        Conn(0).dwSize = 412
        size = 412
        dl& = RasEnumConnections(Conn(0), size, validConnection)
        If validConnection > 0 Then
           ReDim Conn(validConnection - 1)
           Conn(0).dwSize = 412
           size = validConnection * 412
           dl& = RasEnumConnections(Conn(0), size, validConnection)
        End If
        If dl = 0 Then
           GetAllConnections = validConnection
        Else
           GetAllConnections = -1
        End If
    End Function
    '取得所有拨号网路Entry的资讯(不管有没有连线)
    Public Function GetRasNameEntries(Entry() As RASENTRYNAME, Optional PhonePath As String) As Long
    Dim di As Long, lpcb As Long, lpentries As Long
    Dim addit As Long
    Dim i As Long
    di& = RasEnumEntries(vbNullString, PhonePath, 0, 0, lpentries)
    If lpentries > 0 Then
       i = lpentries - 1
       ReDim Entry(i)
       len5 = LenB(Entry(0))
       addit = (4 - (len5 Mod 4)) Mod 4
       Entry(0).dwSize = len5 + addit
       lpcb = Entry(0).dwSize * (i + 1)
       di& = RasEnumEntries(vbNullString, PhonePath, Entry(0), lpcb, lpentries)
    End If
    If di = 0 Then
       GetRasNameEntries = lpentries
    Else
       GetRasNameEntries = -1
    End If
    End Function
      

  4.   

    '呼叫修改某一个连线Entry 的Window
    Public Sub EditEntry(ByVal EntryName As String, Optional ByVal PhonePath As String)
    Dim di As Long
    di = RasEditPhonebookEntry(0, PhonePath, EntryName)
    End Sub
    '於拨号网路中新增一个Entry
    Public Sub CreateEntry(Optional ByVal PhonePath As String)
    Call RasCreatePhonebookEntry(0, PhonePath)
    End Sub
    '自动拨接(Win95 4, 5 个叁数不传,或为vbNullString)
    Public Function DialUp(ByVal EntryName As String, ByVal UserN As String, _
        ByVal Pwd As String, Optional ByVal PhoneBook As String, Optional sDomain As String) As Long
    Dim RasDialPara As RASDIALPARAMS
    Dim bya() As Byte, di As Long
    Dim len5 As Long, i As Long
    Dim hRasConn As Long
    len5 = LenB(RasDialPara)
    i = (4 - (len5 Mod 4)) Mod 4
    RasDialPara.dwSize = len5 + i '1052
    bya = StrConv(EntryName, vbFromUnicode) + ChrB(0)
    Call CopyByte(RasDialPara.szEntryName, bya)
    bya = StrConv(UserN, vbFromUnicode) + ChrB(0)
    Call CopyByte(RasDialPara.szUserName, bya)
    bya = StrConv(Pwd, vbFromUnicode) + ChrB(0)
    Call CopyByte(RasDialPara.szPassword, bya)
    bya = StrConv(sDomain, vbFromUnicode) + ChrB(0)
    Call CopyByte(RasDialPara.szDomain, bya)
    '若使用以下CallBack function的方式,则RasDial()不等连线成功或失败便结束。
    di = RasDial(0, PhoneBook, RasDialPara, 0, AddressOf RasDialFunc, hRasConn)
    '若第二、三个叁数都是0则,RasDial会等连线成功或失败後才执行下一行指令
    'di = RasDial(0, PhoneBook, RasDialPara, 0, 0, hRasConn)
    If di = 0 Then
       DialUp = hRasConn
    Else
       DialUp = 0
       Dim str5 As String
       str5 = String(255, Chr(0))
       Call RasGetErrorString(di, str5, 256)
       MsgBox Left(str5, InStr(1, str5, Chr(0)) - 1), vbCritical
       Call HangUp(hRasConn)
    End If
    End Function
    Public Sub RasDialFunc(ByVal unMsg As Long, _
                           ByVal ConnState As Long, _
                           ByVal dwError As Long)
    If ConnState = &H2000 Then
       ' Connect Complete
    End If
    Debug.Print unMsg, ConnState
    End Sub
    '取消拨接
    Public Function HangUp(ByVal hconn As Long) As Boolean
    Dim st As Long, len5 As Long
    Dim i As Long, ConStatus  As RASCONNSTATUS
    st = RasHangUp(hconn)
    len5 = LenB(ConStatus)
    i = (4 - (len5 Mod 4)) Mod 4
    ConStatus.dwSize = len5 + i
    Do While True
      Call Sleep(0)
      i = RasGetConnectStatus(hconn, ConStatus)
      If i = ERROR_INVALID_HANDLE Then
         Exit Do
      End If
    Loop
    If st = 0 Then
       HangUp = True
    Else
       HangUp = False
    End If
    End Function
    '取得连线状态
    Public Function GetConnectStatus(ByVal hocnn As Long) As Long
    Dim i As Long, ConStatus  As RASCONNSTATUS
    Dim len5 As Long
    len5 = LenB(ConStatus)
    i = (4 - (len5 Mod 4)) Mod 4
    ConStatus.dwSize = len5 + i
    i = RasGetConnectStatus(hconn, ConStatus)
    If i = 0 Then
       GetConnectStatus = ConStatus.RasConnState
    Else
       GetConnectStatus = -1
    End If
    End Function
    Private Sub CopyByte(dest() As Byte, sour() As Byte)
    Dim sourL As Long, sourU As Long
    Dim destL As Long, destU As Long, i As Long, j As Long
    sourL = LBound(sour)
    sourU = UBound(sour)
    destL = LBound(dest)
    destU = UBound(dest)
    j = 0
    For i = sourL To sourU
        dest(destL + j) = sour(i)
        j = j + 1
        If j >= (destU - destL) + 1 Then
           Exit For
        End If
    Next i
    End Sub