本人在WIN7下用RasSetEntryProperties函数创建了一个拨号连接在用RasDialh函数进行拨号时,出现了这样的错误:
当系统只有一个modem设备的时候,拨号时可以的!当系统有两个modem设备的时候,系统就默认第一个modem,并进行拨号,但是我想用的modem设备是第2个设备,我要怎么通过程序去修改他成为第一个modem设备!
如:我的电脑上有两个modem,一个是蓝牙(COM6),一个是3G(COM9)。创建拨号连接的时候系统是默认蓝牙(COM6)为第一拨号设备,我现在就是想改一下他的默认设备为3G (COM9).我看了下华为的客户端软件,它就是这样更改,但是我不知道怎么通过程序去修改!是去修改RasSetEntryProperties里面函数的结构体属性配置?
希望各路老师帮忙下!很急!
(之前也有飞过这样的帖子,但是没满意的回答,可能是我描述问题不够明确)
当系统只有一个modem设备的时候,拨号时可以的!当系统有两个modem设备的时候,系统就默认第一个modem,并进行拨号,但是我想用的modem设备是第2个设备,我要怎么通过程序去修改他成为第一个modem设备!
如:我的电脑上有两个modem,一个是蓝牙(COM6),一个是3G(COM9)。创建拨号连接的时候系统是默认蓝牙(COM6)为第一拨号设备,我现在就是想改一下他的默认设备为3G (COM9).我看了下华为的客户端软件,它就是这样更改,但是我不知道怎么通过程序去修改!是去修改RasSetEntryProperties里面函数的结构体属性配置?
希望各路老师帮忙下!很急!
(之前也有飞过这样的帖子,但是没满意的回答,可能是我描述问题不够明确)
解决方案 »
- 关于socket通信的问题
- windows mobile socket 与pc 通信问题
- 请教一个关于define宏的问题
- 那位知道用VC++6.0编写写字板的程序代码那里有
- 大家一定要看下啊,关于CListCtrl 拖动时,造成全部选中,高亮显示后出现的异常???
- 为何MSN登录不了?
- 关于视频捕捉的问题?
- 高分提问多线程中COM调用Release()函数的一个问题,在线等待!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- VC中SDK应用问题
- 慢慢慢!!!搜索还出不来!!!改了版什么都干不了!我的是ADSL呀!
- 不同对话框设置同一组数据,如何保证数据的一致性。
- HBITMAP 二进制打开保存于数组 然后二进制数组重组成为图片
1、对于已经存在的拨号连接(不需要程序创建),可以通过拨号的号码(如联通的*99#,这个号码对一个运营商而言是固定的),找到拨号连接名字,然后赋值给RasDialParams,直接RasDial。
2、对于要新建拨号连接,可以直接通过RasSetEntryProperties设置RasDialParams参数,然后RasDial。具体参数获得可按下面思路:先手动建立一个3G拨号连接,然后通过RasGetEntryProperties得到RasDialParams参数的各项具体值,这样就可以知道先前创建拨号连接时RasDialParams这个结构体的各个参数如何赋值了。
嗯 现在问题解决了,在RasEntry里面有个szDeviceName 的变量是指定modem设备的名字,modem设备的名字可以通过扫描获取。这样再知道modem设备名字的情况下就可以在拨号前进行判断了。扫描的代码如下BOOL GetModemName(CString* strModemNameArray)
{
DWORD dwSize = 0;
DWORD dwNumOfDevices = 0;
DWORD dwRV = RasEnumDevices(NULL, &dwSize, &dwNumOfDevices);
RASDEVINFO *lpRdi = new RASDEVINFO[dwNumOfDevices];
lpRdi->dwSize = sizeof(*lpRdi);
dwRV = RasEnumDevices(lpRdi, &dwSize, &dwNumOfDevices);
if(dwRV != 0)
{
delete []lpRdi;
return FALSE;
}
CString strType;
int j = 0;
for(int i = 0; i < (int)dwNumOfDevices; i++)
{
strType = lpRdi[i].szDeviceType;
if(strType.CompareNoCase("modem") == 0) // = "RASDT_Modem";
{
strModemNameArray[j] = lpRdi[i].szDeviceName;
j++;
}
}
delete []lpRdi;
return TRUE;
} 原文见这里http://topic.okbase.net/201001/2010012209/3795541.html
但现在又有另外一个问题,如果我不知道设备名,怎么从扫描到的设备里得知那个是3G网卡或modem设备?
但是 RASDEVINFO这个结构体只有如下三个成员,信息比较少,有别的方法来提取这些信息吗?
typedef struct tagRASDEVINFO {
DWORD dwSize;
TCHAR szDeviceType[RAS_MaxDeviceType + 1];
TCHAR szDeviceName[RAS_MaxDeviceName + 1];
} RASDEVINFO;
DWORD dwSize;
TCHAR szDeviceType[RAS_MaxDeviceType + 1];
TCHAR szDeviceName[RAS_MaxDeviceName + 1];
} RASDEVINFO; 对于你那两个都是modem设备,第二个参数值肯定都是RASDT_Modem,而你现在只能扫描出所有szDeviceName的值,不知道对应关系,你这个结构体不能用来区分设备。 况且RASENTRY 这个结构体包含了你这个结构体所有有用的信息。
我觉得我上文已经说的清楚了,你可以用3G拨号号码来区分3G Modem,这个对一个运营商都是唯一的,或者你还可以得到两个连接的RASENTRY 结构体,比较之,看看有什么参数可以区分,这个我没试过!