1、如何断开ADSL播号连接;2、如何启动ADSL播号连接,不选择连接按钮,自动连接。

解决方案 »

  1.   


    下面是一个完整的拨号代码,如果需要自动的话
    把Private Sub Command1_Click()hConn = Dialup("我的连线", "user", "passwd")if hConn = 0 ThenDebug.Print "连线失败"end ifEnd Sub
    放在load事件里面建立拨号联接
    Public Const RAS_MaxEntryName = 256
    Private Type RASENTRYNAMEdwSize As LongszEntryName(RAS_MaxEntryName) As ByteEnd Type
    c 中 Char aa[16] 代表长度是16,可放 15个byte所以对应於vb便是 aa(15) as Byte如此才是长度16 ( 0--15)。故VB的宣告中不能再用szEntryName(RAS_MaxEntryName+1)
    但是Lenb(RASENTRYNAME)的长度却是 261 (4+257),的确,这是vb的问题,而c 的SizeOf传回的是4的倍数(32位元嘛)故值为264,所以我们计算某个Structure的长度时,要再多一些运算。
    以下的Fuction只适用於32位元的win95/ NT,
    '以下在Form中
    Private hConn as LongPrivate Sub Command1_Click()hConn = Dialup("我的连线", "user", "passwd")if hConn = 0 ThenDebug.Print "连线失败"end ifEnd Sub
    Private Sub Command2_Click()Call HangUp(hConn)End Sub
    '以下在.bas中Option ExplicitPublic Const RAS_MaxEntryName = 256Public Const RAS_MaxDeviceName = 128Public Const RAS_MaxDeviceType = 16Public Const RAS_MaxPhoneNumber = 128Public Const RAS_MaxCallbackNumber = 128Public Const UNLEN = 256Public Const PWLEN = 256Public Const DNLEN = 15Public Const ERROR_INVALID_HANDLE = 6Type RASDIALPARAMSdwSize As Long '1052szEntryName(RAS_MaxEntryName) As ByteszPhoneNumber(RAS_MaxPhoneNumber) As ByteszCallbackNumber(RAS_MaxCallbackNumber) As ByteszUserName(UNLEN) As ByteszPassword(PWLEN) As ByteszDomain(DNLEN) As ByteEnd Type
    Type RASCONNSTATUSdwSize As Long '144RasConnState As LongdwError As LongszDeviceType(RAS_MaxDeviceType) As ByteszDeviceName(RAS_MaxDeviceName) As ByteEnd Type
    Declare Function RasGetErrorString Lib "rasapi32" _Alias "RasGetErrorStringA" (ByVal Errvalue As Long, ByVal lpErrStr As String, _ByVal cSize As Long) As LongDeclare 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 LongDeclare Function RasHangUp Lib "rasapi32" Alias _"RasHangUpA" (ByVal hRasConn As Long) As LongDeclare Function RasGetConnectStatus Lib "rasapi32" Alias _"RasGetConnectStatusA" (ByVal hRasConn As Long, _lprasconnstatus As RASCONNSTATUS) As LongDeclare Function RasGetEntryDialParams Lib "rasapi32" _Alias "RasGetEntryDialParamsA" (ByVal lpszPhonebook As String, _lpRasDialParams As RASDIALPARAMS, _lpfPassword As Byte) As LongDeclare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    '自动拨接(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 LongDim RasDialPara As RASDIALPARAMSDim bya() As Byte, di As LongDim len5 As Long, i As LongDim hRasConn As Long
    len5 = LenB(RasDialPara)i = (4 - (len5 Mod 4)) Mod 4RasDialPara.dwSize = len5 + i '1052bya = 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 ThenDialUp = hRasConnElseDialUp = 0Dim str5 As Stringstr5 = String(255, Chr(0))Call RasGetErrorString(di, str5, 256)MsgBox Left(str5, InStr(1, str5, Chr(0)) - 1), vbCriticalCall HangUp(hRasConn)End IfEnd Function
    Public Sub RasDialFunc(ByVal unMsg As Long, _ByVal ConnState As Long, _ByVal dwError As Long)If ConnState = &H2000 Then' Connect CompleteEnd If
    '取消拨接Public Function HangUp(ByVal hconn As Long) As BooleanDim st As Long, len5 As LongDim i As Long, ConStatus As RASCONNSTATUSst = RasHangUp(hconn)len5 = LenB(ConStatus)i = (4 - (len5 Mod 4)) Mod 4ConStatus.dwSize = len5 + iDo While TrueCall Sleep(0)i = RasGetConnectStatus(hconn, ConStatus)If i = ERROR_INVALID_HANDLE ThenExit DoEnd IfLoopIf st = 0 ThenHangUp = TrueElseHangUp = FalseEnd IfEnd Function
    Private Sub CopyByte(dest() As Byte, sour() As Byte)Dim sourL As Long, sourU As LongDim destL As Long, destU As Long, i As Long, j As LongsourL = LBound(sour)sourU = UBound(sour)destL = LBound(dest)destU = UBound(dest)j = 0For i = sourL To sourUdest(destL + j) = sour(i)j = j + 1If j >= (destU - destL) + 1 ThenExit ForEnd IfNext iEnd Sub
      

  2.   

    干吗那么复杂用SHELL调用rasphone就行了
    你可以用 rasphone /? 查看其参数
      

  3.   


    RASPHONE里面要用到"""密码和账号""""如果不是编程..我用NircmdNircmd=ncnc rasdial 我的连接
      

  4.   

    连接时,出现“检测到一个不正确的结构大小”,怎么改?
    XP系统+ADSL