如何实现拨号(在线等待)
以下的这个例子,尝试失败。
我这里是win2000的系统。
请问:
Dim lprasdialparams As RASDIALPARAMS95
lprasdialparams.dwSize = 1052 '在WINDOWS95/98中必须将dwSize设为1052
以上是WINDOWS95/98的设置,2000该如何修改呢?
回复人: gpo2002(永吹不休) ( ) 信誉:105 2003-7-27 16:06:47 得分:50
不用mscomm32.ocx
转贴:
以下代码在2k中调试通过!
'以下在form1,需两个command
Option Explicit
Private Sub Form_Load()
Command1.Caption = "连接"
Command2.Caption = "挂断"
End Sub
Private Sub Command1_Click()
Dim PhoneNum As String, UserName As String, PassWord As String, temp As Long
PhoneNum = "163" '指定电话号码
UserName = "163" '指定用户名
PassWord = "163" '指定密码
temp = AddConnection("", PhoneNum, "", UserName, PassWord, "")
Select Case temp
Case ERROR_PORT_ALREADY_OPEN: temp = MsgBox("错误,端口已经打开!", vbOKOnly, "Error")
Case ERROR_UNKNOWN: temp = MsgBox("未知的错误!", vbOKOnly, "Error")
Case ERROR_REQUEST_TIMEOUT: temp = MsgBox("错误,请求超时!", vbOKOnly, "Error")
Case ERROR_PASSWD_EXPIRED: temp = MsgBox("错误,您没有输入密码!", vbOKOnly, "Error")
Case ERROR_NO_DIALIN_PERMISSION: temp = MsgBox("错误,没有拨号音!", vbOKOnly, "Error")
Case ERROR_SERVER_NOT_RESPONDING: temp = MsgBox("错误,拨入的远程计算机没有响应!", vbOKOnly, "Error")
Case ERROR_UNRECOGNIZED_RESPONSE: temp = MsgBox("错误,未知的响应!", vbOKOnly, "Error")
Case ERROR_NO_RESPONSES: temp = MsgBox("错误,没有响应!", vbOKOnly, "Error")
Case ERROR_DEVICE_NOT_READY: temp = MsgBox("错误,设备没有准备好!", vbOKOnly, "Error")
Case ERROR_LINE_BUSY: temp = MsgBox("错误,占线!", vbOKOnly, "Error")
Case ERROR_NO_ANSWER: temp = MsgBox("错误,没有应答信号!", vbOKOnly, "Error")
Case ERROR_NO_CARRIER: temp = MsgBox("错误,没有载波信号!", vbOKOnly, "Error")
Case ERROR_NO_DIALTONE: temp = MsgBox("错误,没有拨号音!", vbOKOnly, "Error")
Case ERROR_AUTHENTICATION_FAILURE: temp = MsgBox("用户名密码出错!", vbOKOnly, "Error")
Case ERROR_PPP_TIMEOUT: temp = MsgBox("PPP接入超时。", vbOKOnly, "Error")
End Select
End Sub
Private Sub Command2_Click()
RasHangUp hRasConn
End Sub
以下在.bas
Option Explicit
Public hRasConn As Long '定义一个指向RAS调用的全局句柄
Public Const APINULL = 0&
Public Const UNLEN = 256
Public Const DNLEN = 15
Public Const PWLEN = 256
Public Const RAS95_MaxPhoneNumber = 128
Public Const RAS95_MaxEntryName = 256
Public Const RAS95_MaxCallbackNumber = RAS95_MaxPhoneNumber
Public Type RASDIALPARAMS95
dwSize As Long
szEntryName(RAS95_MaxEntryName) As Byte
szPhoneNumber(RAS95_MaxPhoneNumber) As Byte
szCallbackNumber(RAS95_MaxCallbackNumber) As Byte
szUserName(UNLEN) As Byte
szPassword(PWLEN) As Byte
szDomain(DNLEN) As Byte
End Type
'**********************************
'* RAS调用错误代号 *
'**********************************
Public Const NOT_SUPPORTED = 120&
Public Const RASBASEERROR = 600&
Public Const SUCCESS = 0&
Public Const ERROR_PORT_ALREADY_OPEN = (RASBASEERROR + 2)
Public Const ERROR_UNKNOWN = (RASBASEERROR + 35)
Public Const ERROR_REQUEST_TIMEOUT = (RASBASEERROR + 38)
Public Const ERROR_PASSWD_EXPIRED = (RASBASEERROR + 48)
Public Const ERROR_NO_DIALIN_PERMISSION = (RASBASEERROR + 49)
Public Const ERROR_SERVER_NOT_RESPONDING = (RASBASEERROR + 50)
Public Const ERROR_UNRECOGNIZED_RESPONSE = (RASBASEERROR + 52)
Public Const ERROR_NO_RESPONSES = (RASBASEERROR + 60)
Public Const ERROR_DEVICE_NOT_READY = (RASBASEERROR + 66)
Public Const ERROR_LINE_BUSY = (RASBASEERROR + 76)
Public Const ERROR_NO_ANSWER = (RASBASEERROR + 78)
Public Const ERROR_NO_CARRIER = (RASBASEERROR + 79)
Public Const ERROR_NO_DIALTONE = (RASBASEERROR + 80)
Public Const ERROR_AUTHENTICATION_FAILURE = (RASBASEERROR + 91)
Public Const ERROR_PPP_TIMEOUT = (RASBASEERROR + 118)
'**********************************
'* RAS API 声明 *
'**********************************
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, ByVal lpString2 As String) As Long
Public Declare Function RasDial Lib "RasApi32.DLL" Alias "RasDialA" (lpRasDialExtensions As Any, ByVal lpszPhonebook As String, lprasdialparams As Any, ByVal dwNotifierType As Long, ByVal lpvNotifier As Long, lphRasConn As Long) As Long
Public Declare Function RasHangUp Lib "RasApi32.DLL" Alias "RasHangUpA" (ByVal hRasConn As Long) As Long
Public Function AddConnection(strNewEntryName As String, strNewPhoneNumber As String, strNewCallbackNumber As String, strNewUsername As String, strNewPassword As String, strNewDomain As String) As Integer
Dim lngRetCode As Long
Dim lngRetLstrcpy As Long
Dim lngRetHangUp As Long
Dim lprasdialparams As RASDIALPARAMS95
lprasdialparams.dwSize = 1052 '在WINDOWS95/98中必须将dwSize设为1052
'利用lstrcpy函数将字符串拷贝到BYTE数组
lngRetLstrcpy = lstrcpy(lprasdialparams.szEntryName(0), strNewEntryName)
lngRetLstrcpy = lstrcpy(lprasdialparams.szPhoneNumber(0), strNewPhoneNumber)
lngRetLstrcpy = lstrcpy(lprasdialparams.szCallbackNumber(0), strNewCallbackNumber)
lngRetLstrcpy = lstrcpy(lprasdialparams.szUserName(0), strNewUsername)
lngRetLstrcpy = lstrcpy(lprasdialparams.szPassword(0), strNewPassword)
lngRetLstrcpy = lstrcpy(lprasdialparams.szDomain(0), strNewDomain)
'我们使用异步通信
Screen.MousePointer = vbHourglass
hRasConn = 0 '
lngRetCode = RasDial(ByVal APINULL, vbNullString, lprasdialparams, APINULL, AddressOf RasDialFunc, hRasConn)
Screen.MousePointer = vbDefault
'测试有没有错误
If lngRetCode Then
lngRetHangUp = RasHangUp(hRasConn)
End If
AddConnection = lngRetCode
End Function
Public Sub RemoveConnection(H_RasConn As Long)
Call RasHangUp(hRasConn)
End Sub
Public Sub RasDialFunc(ByVal unMsg As Long, ByVal ConnState As Long, ByVal dwError As Long)
If ConnState = &H2000 Then
Debug.Print "拨号成功!"
End If
End Sub
问题点数:100、回复次数:18Top
1 楼wingchi(期待第十五个五年计划)回复于 2003-09-02 18:46:24 得分 10
不会 帮你upTop
2 楼coolskeeter(文子)回复于 2003-09-03 12:43:19 得分 0
upTop
3 楼hxy2003(asfd)回复于 2003-09-03 13:52:45 得分 10
upTop
4 楼agamem(O-Money)回复于 2003-09-03 14:28:55 得分 10
厉害!我去年的代码也翻出来了,等会帮你看看Top
5 楼agamem(O-Money)回复于 2003-09-03 14:35:50 得分 10
我在2000下有的很好,你看一下len(RASDIALPARAMS95)是多少,把这个值给他试一试Top
6 楼coolskeeter(文子)回复于 2003-09-05 09:15:12 得分 0
请教,那我怎们确定,拨号是否成功呢?是否能从控制面板或者哪里能看出来?Top
7 楼mndsoft(枕善居(http://www.mndsoft.com/)回复于 2003-09-05 16:18:20 得分 10
通过modem拨号的问题我已经解决,包括检测是否成功及所有连接出错的信息检测,我可以把代码发送给您。
但是用adsl拨号的问题,至今无法解决,只有用第三方控件Catalyst SocketWrench,效果还可以,但是我很想用api来控制,我查了rasapi32.dll中封装的函数,但苦于一些参数没有办法知道,希望朋友能帮助。
我的e-mail:mndsoft@china-huahang.com
qq:88382850Top
8 楼coolskeeter(文子)回复于 2003-09-05 17:12:18 得分 0
len(RASDIALPARAMS95)编译不通。
Dim lprasdialparams As RASDIALPARAMS95
lprasdialparams.dwSize = Len(lprasdialparams)
这样报错:RasDial=632
我查了一下:632是ERROR_INVALID_SIZE(The structure size is incorrect.%0)
参见:RASERROR.H
急救!!!!Top
9 楼yijiansong(不知路在何方)回复于 2003-09-05 17:16:36 得分 10
UPTop
10 楼Gelim(Gelim)回复于 2003-09-06 10:13:55 得分 10
我有个程序,你给油箱给我!
Top
11 楼hgnan(搞IT的民工)回复于 2003-09-06 11:43:21 得分 5
在vb 中 shell autoppp.bat
autoppp.bat 文件容如下
rasdial adsl "user" "password"
@if errorlevel 638 then 成功
@if errorlevel 691 then 失败
:end1
adsl 是在拨号连接建立好的连接名 。 可以是ppp 也可以是pppoe
rasdial 命令的使用可以参见 windows 网上邻居 的帮助。Top
12 楼coolskeeter(文子)回复于 2003-09-12 08:52:32 得分 0
email:tanxin@necsi.nec.com.cn
VB的拨号还有没有办法啊?急啊!
我这里是ISDN拨号连接,你那个bat是否可以用?是不是那个“adsl”改成"ISDN"就行?
autoppp.bat 文件容如下:
rasdial adsl "user" "password"
@if errorlevel 638 then 成功
@if errorlevel 691 then 失败
:end1
Top
13 楼coolskeeter(文子)回复于 2003-09-12 08:55:20 得分 0
ISDN拨号得输入电话号码,你这个bat里怎么没有电话号码?Top
14 楼xxcw(Puma)回复于 2003-09-16 17:31:23 得分 5
我也要做这样的软件,但无法实现,急!UpTop
15 楼ljcdeid(LJC)回复于 2003-09-16 19:23:41 得分 5
同时天涯沦落人,我也在做这样的软件,但到目前为止还没有找到合适的解决方法
特别关注!!!!
谁能帮我解决300分以上决不食言!
ljc-ljc@sohu.comTop
16 楼rednod(奋斗ing.......)回复于 2003-09-16 21:19:01 得分 5
弹出拨号连接来算不算。
这样我到知道,我就这样用的。
Top
17 楼xxcw(Puma)回复于 2003-09-16 22:05:37 得分 5
弹出拔号连接,能输入用户名,密码及电话号码也不错。
zw.net@163.comTop
18 楼FUNDGIRL(阿弥陀佛(别抢我分,谢谢))回复于 2003-09-19 00:02:38 得分 5
哈哈.
要不要拿出PPPOE协议资料看看?
自己写个拨号软件??Top



