有关VPN拨号上网的应用程序的开发 请问,那位高手有VPN拨号上网经验,如果有可否提供源代码可供参考,本人不胜感激。分没办法大于100,希望能解决我的问题。在线等待 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VPN 建立连接后就和访问局域网里的机器没有区别... 你说的这个问题很难自己做到吧...我们是在程序中执行VPN自己的拨号程序.. while up do begin 永远无解! end; 我自己解决了,调用rasapi32.dll,系统API,不过还有些函数不是很清楚,比如建立话本函数rascreatephonebookentry,不知如何用,如果高手,请给个解释 哦~~ 你是说ras呀,这个好解决 hehe^^给你点资料..在DELPHI程序管理拨号网络 用MODEM拨号上网,仍是大多数个人网民选择上网的方式.如果能在我们的应用程序中管理拨号网络(如Foxmail、Sygate中的拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力. 在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的函数来获取和设置拨号连接网络的信息。在Delphi帮助文件中,有相关函数的说明。 在此,我们要讨论的管理项目有:1、获取当前系统中可用的拨号连接名称 2、新建拨号连接、修改拨号连接的属性 3、获取和设置拨号连接的拨号参数 4、用指定的拨号连接拨号、挂断指定的拨号连接 5、获取当前活动的连接及其连接状态零、获取RasAPI函数执行失败的错误信息 RasAPI的调用接口是统一的,但对于不同的Windows版本,许多常量和数据结构的定义是不同的。如果使用的数据结构与Windows版本不对应,RasAPI函数执行会失败;另外,其它原因如其它程序也在使用同一个拨号连接进行拨号等,也会造成RasAPI函数执行失败.鉴于此原因,我们需要先讨论获取RasAPI函数执行失败的错误信息的函数。 CDSoftwareWj谢谢你,我的QQ号27769636,跟你做个朋友,内容你希望你继续发 varRASDIALPARAMSData : RASDIALPARAMS;dwResult : DWord;RasCon : DWord;begin//指定拨号连接的拨号参数with RASDIALPARAMSData dobegindwSize := sizeof( RASDIALPARAMS );//结构大小szEntryName := '163';//指定拨号连接的名称szUserName := 'MyName';//指定用户名称szPassword := 'MyPassword';//指定用户密码szDomain := 'MyDomain';//指定域名szCallbackNumber := '';//指定回叫号码szPhoneNumber := '';//指定拨号号码end;//用指定的拨号参数拨号,采用同步拨号方式dwResult := RasDial( NIL,'',@RASDIALPARAMSData,0,NIL,RasCon );if dwResult <> 0 then //设置指定拨号连接的拨号参数失败memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号失败:' + GetRasError( dwResult ))elsememo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号成功!' );end; 2、挂断指定的拨号连接 挂断拨号连接的RasAPI函数为RasHangUp,其函数原型为:function RasHangUp(hRasConn : DWORD//要挂断的拨号连接的句柄) : DWORD; stdcall;function RasHangUp;external RasApiDll name 'RasHangUpA'; 函数返回值为0表示执行成功;否则为错误代码. 下面是一个应用例子,挂断由RasDial建立的拨号连接.//挂断由RasDial建立的拨号连接dwResult := RasHangUp( RasCon );if dwResult <> 0 then //挂断失败memo1.lines.add( '挂断失败:' + GetRasError( dwResult ))elsememo1.lines.add( '挂断成功!'); 五、获取当前活动的连接及其连接状态 1、获取当前活动的连接 获取当前活动的连接的RasAPI函数为RasEnumConnections,其函数原型为:function RasEnumConnections( var lprasconn : RASCONN ;//接收活动连接的缓冲区的指针var lpcb: DWORD;//缓冲区大小var lpcConnections : DWORD//实际的活动连接数) : DWORD; stdcall;function RasEnumConnections;external RasApiDll name 'RasEnumConnectionsA';参数lprasconn提供了一个RASCONN类型数组的指针,指向一个接收活动连接的缓冲 区,其中RASCONN的类型说明如下:RASCONN = recorddwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(RASCONN)hrasconn : HRASCONN;//活动连接的句柄szEntryName : array[0..RAS_MaxEntryName] of char;//活动连接的名称szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称end; 参数lpcb为缓冲区大小(Bytes). 参数lpcConnections将返回实际的连接数目. 函数返回值为0表示执行成功;否则为错误代码. 2、获取指定连接的连接状态 获取指定连接的连接状态的RasAPI函数为RasGetConnectStatus,其函数原型为:function RasGetConnectStatus(hrasconn : HRASCONN; //指定活动连接的句柄lprasconnstatus : LPRASCONNSTATUS//连接状态参数) : DWORD; stdcall;function RasGetConnectStatus;external RasApiDll name 'RasGetConnectStatusA'; 连接状态参数lprasconnstatus是一个RASCONNSTATUS类型的指针,将返回连接状态参数. RASCONNSTATUS和LPRASCONNSTATUS的类型说明如下:LPRASCONNSTATUS = ^RASCONNSTATUS;RASCONNSTATUS = recorddwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(RASCONNSTATUS)rasconnstate : RASCONNSTATE;//连接状态标识,一组DWORD类型数值的集合。dwError : DWORD;//错误类型标识符szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称end; 函数返回值为0表示执行成功;否则为错误代码. 下面是一个应用例子,列出了当前系统中活动的连接的名称及其连接状态.注意,应在RASCONN缓冲区的第一个RASCONN结构中设置dwSize.constMaxConnections = 10;//最多的拨号连接数目varconnections : array[0..MaxConnections-1] of RASCONN;longSize : dword;intAvailabelConnections : dword;intIndex : integer;dwResult : DWORD;strTemp : string;RASCONNSTATUSData : RASCONNSTATUS; beginconnections[ 0 ].dwSize := sizeof(RASCONN);//结构的大小longSize := MaxConnections * connections[ 0 ].dwSize;//缓冲区大小intAvailabelConnections := 0;//实际的活动连接的数目//获取当前系统中活动的连接dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections );if dwResult <> 0 then //获取当前系统中活动的连接memo1.lines.add( '获取当前系统中活动的连接:' + GetRasError( dwResult ))elsebeginmemo1.lines.add( '当前系统中活动的连接' + inttostr( intAvailabelConnections ) + '个,列举如下' );for intIndex := 0 to intAvailabelConnections - 1 dobeginstrTemp := '连接名称:' + StrPAS( connections[ intIndex ].szEntryName )+ ' 设备类型:' + StrPAS( connections[ intIndex ].szDeviceType )+ ' 设备名称:' + StrPAS( connections[ intIndex ].szDeviceName );//获取连接状态dwResult := RasGetConnectStatus( connections[ intIndex ].hRasConn,@RASCONNSTATUSData );if 0 <> dwResult thenstrTemp := strTemp + ' 连接状态未知:' + GetRasError( dwResult )else if RASCONNSTATUSData.rasconnstate = RASCS_Connected thenstrTemp := strTemp + ' 连接状态:已连接'elsestrTemp := strTemp + ' 连接状态:(' + inttostr(RASCONNSTATUSData.rasconnstate)+')';memo1.lines.add( strTemp );end;end;end; 完... hehe^^ 这是我收集的,希望对你有用有事再发帖子吧 delphi 7 中关于指针的小问题 求解? 晕晕晕,,,,,,, 高分求助procedure的问题 关于DELPHI调用动态连接库的问题! 小问题,来者有份 一道题目 迷茫的我!! 关于delphi处理图象的难题 http://216.239.55.102/ google ,还能用 SQL语句怎样写各位仁兄请指教?! SQL server 7.0 要建何种字段可以保存进自定义文件? 使用TSIMPLEDATASET连接SQL2K,无法使用自增型主键字段。另:谁有最新DBEXPMSS。DLL请给我一份。
begin
永远无解!
end;
网络(如Foxmail、Sygate中的拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,
运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.
在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理
程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的函数来获取和设置拨号连接网络的信息。在
Delphi帮助文件中,有相关函数的说明。 在此,我们要讨论的管理项目有:
1、获取当前系统中可用的拨号连接名称
2、新建拨号连接、修改拨号连接的属性
3、获取和设置拨号连接的拨号参数
4、用指定的拨号连接拨号、挂断指定的拨号连接
5、获取当前活动的连接及其连接状态零、获取RasAPI函数执行失败的错误信息
RasAPI的调用接口是统一的,但对于不同的Windows版本,许多常量和数据结构的定义是不同的。
如果使用的数据结构与Windows版本不对应,RasAPI函数执行会失败;另外,其它原因如其它程序也
在使用同一个拨号连接进行拨号等,也会造成RasAPI函数执行失败.鉴于此原因,我们需要先讨论获
取RasAPI函数执行失败的错误信息的函数。
RASDIALPARAMSData : RASDIALPARAMS;
dwResult : DWord;
RasCon : DWord;
begin
//指定拨号连接的拨号参数
with RASDIALPARAMSData do
begin
dwSize := sizeof( RASDIALPARAMS );//结构大小
szEntryName := '163';//指定拨号连接的名称
szUserName := 'MyName';//指定用户名称
szPassword := 'MyPassword';//指定用户密码
szDomain := 'MyDomain';//指定域名
szCallbackNumber := '';//指定回叫号码
szPhoneNumber := '';//指定拨号号码
end;//用指定的拨号参数拨号,采用同步拨号方式
dwResult := RasDial( NIL,'',@RASDIALPARAMSData,0,NIL,RasCon );if dwResult <> 0 then //设置指定拨号连接的拨号参数失败
memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号失败:'
+ GetRasError( dwResult ))
else
memo1.lines.add( '用'+StrPAS(RASDIALPARAMSData.szEntryName )+'拨号成功!' );
end; 2、挂断指定的拨号连接
挂断拨号连接的RasAPI函数为RasHangUp,其函数原型为:
function RasHangUp(
hRasConn : DWORD//要挂断的拨号连接的句柄
) : DWORD; stdcall;
function RasHangUp;external RasApiDll name 'RasHangUpA';
函数返回值为0表示执行成功;否则为错误代码.
下面是一个应用例子,挂断由RasDial建立的拨号连接.//挂断由RasDial建立的拨号连接
dwResult := RasHangUp( RasCon );
if dwResult <> 0 then //挂断失败
memo1.lines.add( '挂断失败:' + GetRasError( dwResult ))
else
memo1.lines.add( '挂断成功!'); 五、获取当前活动的连接及其连接状态
1、获取当前活动的连接
获取当前活动的连接的RasAPI函数为RasEnumConnections,其函数原型为:
function RasEnumConnections( var lprasconn : RASCONN ;//接收活动连接的缓冲区的指针
var lpcb: DWORD;//缓冲区大小
var lpcConnections : DWORD//实际的活动连接数
) : DWORD; stdcall;
function RasEnumConnections;external RasApiDll name 'RasEnumConnectionsA';
参数lprasconn提供了一个RASCONN类型数组的指针,指向一个接收活动连接的缓冲
区,其中RASCONN的类型说明如下:
RASCONN = record
dwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(RASCONN)
hrasconn : HRASCONN;//活动连接的句柄
szEntryName : array[0..RAS_MaxEntryName] of char;//活动连接的名称
szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型
szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称
end;
参数lpcb为缓冲区大小(Bytes).
参数lpcConnections将返回实际的连接数目. 函数返回值为0表示执行成功;否则为错误代码. 2、获取指定连接的连接状态
获取指定连接的连接状态的RasAPI函数为RasGetConnectStatus,其函数原型为:
function RasGetConnectStatus(
hrasconn : HRASCONN; //指定活动连接的句柄
lprasconnstatus : LPRASCONNSTATUS//连接状态参数
) : DWORD; stdcall;
function RasGetConnectStatus;external RasApiDll name 'RasGetConnectStatusA';
连接状态参数lprasconnstatus是一个RASCONNSTATUS类型的指针,将返回连接状态参数.
RASCONNSTATUS和LPRASCONNSTATUS的类型说明如下:
LPRASCONNSTATUS = ^RASCONNSTATUS;
RASCONNSTATUS = record
dwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(RASCONNSTATUS)
rasconnstate : RASCONNSTATE;//连接状态标识,一组DWORD类型数值的集合。
dwError : DWORD;//错误类型标识符
szDeviceType : array[0..RAS_MaxDeviceType] of char;//活动连接的所用的设备类型
szDeviceName : array[0..RAS_MaxDeviceName] of char;//活动连接的所用的设备名称
end;
函数返回值为0表示执行成功;否则为错误代码. 下面是一个应用例子,列出了当前系统中活动的连接的名称及其连接状态.
注意,应在RASCONN缓冲区的第一个RASCONN结构中设置dwSize.const
MaxConnections = 10;//最多的拨号连接数目
var
connections : array[0..MaxConnections-1] of RASCONN;
longSize : dword;
intAvailabelConnections : dword;
intIndex : integer;
dwResult : DWORD;
strTemp : string;
RASCONNSTATUSData : RASCONNSTATUS;
begin
connections[ 0 ].dwSize := sizeof(RASCONN);//结构的大小
longSize := MaxConnections * connections[ 0 ].dwSize;//缓冲区大小
intAvailabelConnections := 0;//实际的活动连接的数目
//获取当前系统中活动的连接
dwResult := RasEnumConnections( connections[ 0 ], longSize,intAvailabelConnections );
if dwResult <> 0 then //获取当前系统中活动的连接
memo1.lines.add( '获取当前系统中活动的连接:' + GetRasError( dwResult ))
else
begin
memo1.lines.add( '当前系统中活动的连接' + inttostr( intAvailabelConnections )
+ '个,列举如下' );
for intIndex := 0 to intAvailabelConnections - 1 do
begin
strTemp := '连接名称:' + StrPAS( connections[ intIndex ].szEntryName )
+ ' 设备类型:' + StrPAS( connections[ intIndex ].szDeviceType )
+ ' 设备名称:' + StrPAS( connections[ intIndex ].szDeviceName );
//获取连接状态
dwResult := RasGetConnectStatus( connections[ intIndex ].hRasConn,@RASCONNSTATUSData );
if 0 <> dwResult then
strTemp := strTemp + ' 连接状态未知:' + GetRasError( dwResult )
else if RASCONNSTATUSData.rasconnstate = RASCS_Connected then
strTemp := strTemp + ' 连接状态:已连接'
else
strTemp := strTemp + ' 连接状态:(' +
inttostr(RASCONNSTATUSData.rasconnstate)+')';
memo1.lines.add( strTemp );
end;
end;
end;