首先,安装好wince下的3G模块(型号: 华为E1750)驱动,在“网络和拨号连接”中,会出现WCDMA的拨号上网icon。
参考了论坛上的一些答问,找到通过以下代码可以实现wince开机后自动完成拨号。
TCHAR szAutoDialEntryName[256] = TEXT("-p-eWCDMA"); //命令参数,注意:将-p-e后面的换成你需要的拨号器就可以
LPCTSTR ProcName = _T("rnaapp.exe");
SHELLEXECUTEINFO lp= {0};
lp.lpFile=ProcName;
lp.cbSize=sizeof(SHELLEXECUTEINFO);
lp.lpVerb=_T("Open");
lp.fMask = SEE_MASK_NOCLOSEPROCESS;
lp.lpParameters = szAutoDialEntryName;
lp.lpDirectory = NULL;
lp.hInstApp = NULL;
lp.hwnd = NULL;
lp.nShow = SW_HIDE;
//调用函数
DWORD ret=ShellExecuteEx(&lp);
SHELLEXECUTEINFO 的函数原型:
typedef struct _SHELLEXECUTEINFO {
DWORD cbSize;
ULONG fMask;
HWND hwnd;
LPCTSTR lpVerb;
LPCTSTR lpFile;
LPCTSTR lpParameters;
LPCTSTR lpDirectory;
int nShow;
HINSTANCE hInstApp;
LPVOID lpIDList;
LPCTSTR lpClass;
HKEY hkeyClass;
DWORD dwHotKey;
union {
HANDLE hIcon;
HANDLE hMonitor;
} DUMMYUNIONNAME;
HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
参数详解:
cbSize
结构大小,以字节为单位。
fMask
一个标志数组,用来设置其他成员的有效性。
hwnd
可选。执行ShellExecuteEx的窗口句柄,可设为NULL。
lpVerb
指定执行的动作,包括:edit ,explore ,find ,open,print, properties
lpFile
以/0 结尾的字符串,指出 lpVerb 的操作对象的路径,被系统支持的操作包括文本的 open 、 print等
lpParameters
可选。运行/打开程序的参数,如果打开的是一个文档,则该项无效
lpDirectory
可选。指明工作目录的名字,成员没有说明,则默认为当前目录
nShow
必须。指定打开的程序的显示方式,为SW_值中的一个。
hInstApp
【out】如果设置SEE_MASK_NOCLOSEPROCESS S值并且ShellExecuteEx 调用成功,则该项的值大于32,如果调用失败,则将设置为 SE_ERR_XXX 的错误值。
lpIDList
一个ITEMIDLIST结构的地址,用来存储成员的特别标识符,当fMask不包括SEE_MASK_IDLIST或SEE_MASK_INVOKEIDLIST时该项被忽略
lpClass
用以指明文件类别的名字或GUID,当fMask不包括SEE_MASK_CLASSNAME时该项被忽略
hkeyClass
获得已在系统注册的文件类型的Handle,当fMask不包括SEE_MASK_HOTKEY时该项被忽略
dwHotKey
程序的热键关联,低位存储虚拟关键码(Key Code),高位存储修改标志位(HOTKEYF_),修改标志为(modifier flags)的详细列表请看WM_SETHOTKEY消息的描述,当fmask不包括SEE_MASK_HOTKEY时该项被忽略
DUMMYUNIONNAME
hIcon
取得对应文件类型的图标的Handle,当fMask不包括SEE_MASK_ICON时该项被忽略
hMonitor
将文档显示在显示器上的Handle,当fMask不包括SEE_MASK_HMONITOR时该项被忽略
hProcess
指向新启动的程序的句柄。若fMask不设为SEE_MASK_NOCLOSEPROCESS则该项值为NULL。但若程序没有启动,即使fMask设为SEE_MASK_NOCLOSEPROCESS,该值也仍为NULL。
另外还可以编写RAS Dialing的相关代码完成自动拨号工作
void CRAS_DemoDlg::RASDialing(){
RASDIALPARAMS rdParams;
HRASCONN hRasConn = NULL;
//初始化拨号参数
rdParams.dwSize = sizeof(RASDIALPARAMS);
wcscpy(rdParams.szEntryName,_T("WCDMA"));
wcscpy(rdParams.szPhoneNumber,_T(""));
wcscpy(rdParams.szCallbackNumber,_T(""));
wcscpy(rdParams.szUserName,_T(""));
wcscpy(rdParams.szPassword,_T(""));
wcscpy(rdParams.szDomain,_T(""));
DWORD dwRet;
dwRet = RasDial(NULL,NULL,&rdParams,0xffffffff,&m_hWnd,&hRasConn);
if (dwRet!=0){
AfxMessageBox(_T("拨号失败"));
}
}