// GPRSwitch.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "GPRSwitch.h"
#include <windows.h>
#include <commctrl.h>
#include "GprsXmlConfig.h"
#include <connmgr.h>
#include <ras.h>
#include <Raserror.h>
//#include <stdio.h>#define MAX_LOADSTRING 100
#define WM_GPRSwitch WM_USER+7227
#define WM_CTLCENTER WM_USER+112
#define GPRS_STATUS_ON 1
#define GPRS_STATUS_OFF 0// 全局变量:
HINSTANCE            g_hInst;            // 当前实例
HANDLE                hConnection;
HRESULT                hResult;
DWORD                dwStatus;
GprsXmlConfig        config;
DWORD                bufsize;
DWORD                numEntries;
//FILE *fp;
HWND                hWndDes = NULL;            // 接收消息的主程序句柄// 此代码模块中包含的函数的前向声明:
ATOM            MyRegisterClass(HINSTANCE, LPTSTR);
BOOL            InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{MSG msg;nCmdShow = SW_HIDE;// 执行应用程序初始化:if (!InitInstance(hInstance, nCmdShow)) {return FALSE;}HACCEL hAccelTable;hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GPRSWITCH));// 主消息循环:while (GetMessage(&msg, NULL, 0, 0)) {if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;
}//
//  函数: MyRegisterClass()
//
//  目的: 注册窗口类。
//
//  注释:
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{WNDCLASS wc;wc.style         = CS_HREDRAW | CS_VREDRAW;wc.lpfnWndProc   = WndProc;wc.cbClsExtra    = 0;wc.cbWndExtra    = 0;wc.hInstance     = hInstance;wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GPRSWITCH));wc.hCursor       = 0;wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);wc.lpszMenuName  = 0;wc.lpszClassName = szWindowClass;return RegisterClass(&wc);
}BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{HWND hWnd;TCHAR szTitle[MAX_LOADSTRING] = _T("GPRS Switcher");        // 标题栏文本TCHAR szWindowClass[MAX_LOADSTRING] = _T("TBWidget");    // 主窗口类名
g_hInst = hInstance; // 将实例句柄存储在全局变量中
SHInitExtraControls();LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_GPRSWITCH, szWindowClass, MAX_LOADSTRING);hWnd = FindWindow(szWindowClass, szTitle);    if (hWnd) {return 0;} if (!MyRegisterClass(hInstance, szWindowClass)){return FALSE;}hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);hWndDes = FindWindow(_T("TBClass"), _T("TBMainWnd"));SendMessage(hWnd, WM_GPRSwitch, 0, 0);return TRUE;
}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message) {case WM_GPRSwitch:RASCONN entries[25];bufsize = 0;numEntries = 0;bufsize = 25 * sizeof(RASCONN);entries[0].dwSize = sizeof(RASCONN);//必须RASCONNSTATUS status;//RAS状态在ras.h中可以查找到。status.dwSize = sizeof(RASCONNSTATUS);//fp = fopen("GPRSwitch.log", "w");if(RasEnumConnections(entries, &bufsize, &numEntries) == 0) //枚举所有活动的连接
            {if (numEntries == 0) //无GPRS连接
                {RASDIALPARAMS rdParams;HRASCONN hRasConn = NULL;//初始化参数rdParams.dwSize = sizeof(RASDIALPARAMS);lstrcpy(rdParams.szEntryName, _T("GPRS"));lstrcpy(rdParams.szPhoneNumber, _T(""));lstrcpy(rdParams.szCallbackNumber, _T(""));lstrcpy(rdParams.szPhoneNumber, _T(""));lstrcpy(rdParams.szUserName, _T(""));lstrcpy(rdParams.szPassword, _T(""));lstrcpy(rdParams.szDomain, _T(""));DWORD dwRet;dwRet = RasDial(NULL, NULL, &rdParams, 0xFFFFFFFF, NULL, &hRasConn); //通过给窗体发送WM_RASDIALEVENT消息。if(dwRet != 0)    //拔号失败
                    {if (hWndDes != NULL){SendMessage(hWndDes, WM_CTLCENTER, WM_GPRSwitch, GPRS_STATUS_OFF);}}else{if (hWndDes != NULL){SendMessage(hWndDes, WM_CTLCENTER, WM_GPRSwitch, GPRS_STATUS_ON);}}exit(0);break;}for(DWORD i=0; i<numEntries; i++) // 有GPRS连接
                {for (DWORD j=0; j<wcslen(entries[i].szEntryName)-4; j++){if (entries[i].szEntryName[j] == 'G'&& entries[i].szEntryName[j+1] == 'P'&& entries[i].szEntryName[j+2] == 'R'&& entries[i].szEntryName[j+3] == 'S'){RasHangUp(entries[i].hrasconn);while(RasGetConnectStatus(entries[i].hrasconn,&status)==0)//得到连接的状态(能获取得到)
                            {Sleep(0);    //Sleep(0)是指CPU交出当前线程的执行权,让CPU去执行其他线程。
                            }break;}}//fwprintf(fp, _T("%d : %s\n"), i, entries[i].szEntryName);
                }if (hWndDes != NULL){SendMessage(hWndDes, WM_CTLCENTER, WM_GPRSwitch, GPRS_STATUS_OFF);}}//fclose(fp);exit(0);break;case WM_DESTROY:PostQuitMessage(0);break;case WM_CLOSE:exit(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}

// GPRSXmlConfig.h#pragma once
/*!
* 通过wap-provisioningdoc方式设置gprs连接
* 使用方式:枚举网络找一个名为CMWAP_GPRS的连接,(如果找不到新建一个名为CMWAP_GPRS的网络连接),
* 然后通过建立该连接来进行网络访问
*/
class GprsXmlConfig
{
public:GprsXmlConfig(void);~GprsXmlConfig(void);public:/* 创建一个名为CMWAP_GPRS的网络设置*/BOOL CreateCmwapNetConfig();/*选择名为CMWAP_GPRS的网络设置的GUID*/BOOL findCmwapNetGuid(GUID&);
};

// GprsXmlConfig.cpp
#include "StdAfx.h"
#include "GprsXmlConfig.h"
#include <Cfgmgrapi.h>
#include <connmgr.h>
#include <connmgr_proxy.h>
#pragma comment( lib,"cellcore.lib")
#pragma comment(lib, "Aygshell.lib")GprsXmlConfig::GprsXmlConfig(void)
{
}GprsXmlConfig::~GprsXmlConfig(void)
{
}BOOL GprsXmlConfig::findCmwapNetGuid(GUID& guid)
{BOOL rst = false;HRESULT hr = 0;int nIndex = 0;CONNMGR_DESTINATION_INFO DestInfo;//WCHAR wszDestGUIDStr[128];while ( (hr = ConnMgrEnumDestinations(nIndex,&DestInfo)) == 0 ){if (_tcscmp(_T("中国移动WAP设置"),DestInfo.szDescription)==0){guid = DestInfo.guid;rst = true;break;}nIndex++;}return rst;
}BOOL GprsXmlConfig::CreateCmwapNetConfig()
{//AfxMessageBox(_T("开始创建连接"));LPCWSTR g_wszFavoriteXml = L"<wap-provisioningdoc>"L"    <characteristic type=\"CM_Networks\">"L"        <characteristic type=\"中国移动WAP设置\">"L"            <parm name=\"DestId\" value=\"{EA9A391E-7878-0D28-4CA2-21F8C61F1243}\"/>"L"        </characteristic>"L"    </characteristic>"L"    <characteristic type=\"CM_GPRSEntries\">"L"        <characteristic type=\"中国移动 GPRS 因特网\">"L"            <parm name=\"DestId\" value=\"{EA9A391E-7878-0D28-4CA2-21F8C61F1243}\"/>"L"            <characteristic type=\"DevSpecificCellular\">"L"                <parm name=\"BearerInfoValid\" value=\"1\"/>"L"                <parm name=\"GPRSInfoValid\" value=\"1\"/>"L"                <parm name=\"GPRSInfoProtocolType\" value=\"2\"/>"L"                <parm name=\"GPRSInfoL2ProtocolType\" value=\"PPP\"/>"L"                <parm name=\"GPRSInfoAccessPointName\" value=\"cmwap\"/>"L"                <parm name=\"GPRSInfoAddress\" value=\"\"/>"L"                <parm name=\"GPRSInfoDataCompression\" value=\"1\"/>"L"                <parm name=\"GPRSInfoHeaderCompression\" value=\"1\"/>"L"                <parm name=\"GPRSInfoParameters\" value=\"\"/>"L"            </characteristic>"L"        </characteristic>"L"    </characteristic>"L"    <characteristic type=\"CM_ProxyEntries\">"L"        <characteristic type=\"HTTP-{EA9A391E-7878-0D28-4CA2-21F8C61F1243}\">"L"            <parm name=\"SrcId\" value=\"{EA9A391E-7878-0D28-4CA2-21F8C61F1243}\"/>"L"            <parm name=\"DestId\" value=\"{436EF144-B4FB-4863-A041-8F905A62C572}\"/>"L"            <parm name=\"Proxy\" value=\"10.0.0.172:80\"/>"L"            <parm name=\"Enable\" value=\"1\"/>"L"            <parm name=\"Type\" value=\"1\"/>"L"        </characteristic>"L"        <characteristic type=\"WAP-{EA9A391E-7878-0D28-4CA2-21F8C61F1243}\">"L"            <parm name=\"SrcId\" value=\"{EA9A391E-7878-0D28-4CA2-21F8C61F1243}\"/>"L"            <parm name=\"DestId\" value=\"{7022E968-5A97-4051-BC1C-C578E2FBA5D9}\"/>"L"            <parm name=\"Proxy\" value=\"10.0.0.172:9201\"/>"L"            <parm name=\"Enable\" value=\"1\"/>"L"            <parm name=\"Type\" value=\"2\"/>"L"        </characteristic>"L"    </characteristic>"L"</wap-provisioningdoc>";HRESULT hr       = E_FAIL;LPWSTR wszOutput   = NULL;hr = DMProcessConfigXML(g_wszFavoriteXml, CFGFLAG_PROCESS, &wszOutput);
// if (hr==S_OK)
// {
//     AfxMessageBox(_T("创建连接成功!"));
// }if (wszOutput){delete [] wszOutput;wszOutput=NULL;}return (hr==S_OK);}

转载于:https://www.cnblogs.com/ZzzZzz/archive/2012/12/30/2839768.html

WinCE切换GPRS相关推荐

  1. WinCE下GPRS自动拨号软件(GPRS AutoDial)

    之前在WinCE下调试USB的3G Modem时,写过一个拨号助手RASManager,基本能用.后来车机卖到俄罗斯去,客户老M提供了一个更好的GPRS自动拨号软件GPRS AutoDial,功能完善 ...

  2. Android开发中WIFI和GPRS网络的切换

    在项目的开发中因为要使用到WIFI和GPRS网络的切换,因此就研究了一下通过代码打开WIFI和GPRS的工作. 无论是切换WIFI还是切换GPRS网络都需要设置相应的权限,所以需要在AndroidMa ...

  3. GPRS 无线通讯网络介绍问答 40 题

    1.什么是 GPRS?  GPRS正式商用以来,使用的客户人数不断增多,但很多移动手机用户对这个以英文字母缩写命名的新业务还不了解,究竟什么是GPRS?GPRS能给用户带来什么呢? GPRS是通用分组 ...

  4. 什么是GPRS 无线通讯网络

    GPRS 是通用分组无线业务(GeneralPacketRadioService)的英文简称,是一种新的分组数据承载业务.相对原来GSM的拨号方式的电路交换 数据传送方式,GPRS是分组交换技术,具有 ...

  5. Android彩信发送

    彩信发送,首先直接上调用系统app发彩信的代码: Intent sendIntent = new Intent(Intent.ACTION_SEND, Uri.parse("mms://&q ...

  6. DTU电表远程抄表应用方案

    DTU电表远程抄表应用方案 传统人工抄表方式需要投入大量的人工成本,且效率低下.在科技的推动下,目前智能化抄表开始普及,所有数据抄报上网,任何异常在监控平台一目了然. 下面就介绍一下如何用¥60的硬件 ...

  7. WINCE下USB的同步模式与U盘模式的切换

    在SMDK2416.bat中,找到 set BSP_USBFNCLASS=SERIAL @REM set BSP_USBFNCLASS=MASS_STORAGE set BSP_KITL=NONE r ...

  8. wince下实现GPRS上网,程序控制拨号 .

    一.打开GPRS网络数据连接 int platform_open_gprs_connect(void) {     if(WINCE_GPRS_NODE.hRasConn) {         ret ...

  9. android socket gprs 与 wifi 网络切换,Android应用开发Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址...

    Android 获取手机Wifi地址和Gprs地址,反射修改Wifi地址. //查看Wifi地址publicString   getWifiIpAddress() { //获取wifi服务WifiMa ...

最新文章

  1. sql server 清空数据库表数据
  2. Maven(七) maven 常用命令
  3. ajax跨域请求.json文件,使用JSONP对JSON文件进行跨域Ajax请求
  4. 【城市沙龙】LiveVideoStack Meet | 长沙:多媒体与广电
  5. WordPress分类列表函数:wp_list_categories用法及参数详解举例
  6. Android获取有线和无线(wifi)的IP地址
  7. 福州联通与市政府携手 共筑新型智慧城市
  8. WPF4.5 Cockbook - Chapter8(Style, Triggers and Control Template)
  9. Hirens Boot DVD 15.2 功能恢复版 v1.1 -- 制作U盘启动盘
  10. 在C++ Builder6上使用Boost正则表达式库
  11. Python笔记:re模块详解
  12. 用PS怎么画虚线圆?
  13. 未来,将是Captain technology新能源汽车的舞台
  14. DeepFace: Closing the Gap to Human-Level Performance in Face Verification
  15. 《聪明人用方格笔记本》读书笔记
  16. apicloud传递数据
  17. #108 – The Logical Tree(逻辑树)
  18. git提交Push to origin/master was rejected
  19. linux no root file or directory,安装Ubuntu时出现“no root file system is defined”的问题解决...
  20. 超详细的css知识树状图~CSS选择器盒子模型、浮动、定位和装饰

热门文章

  1. 前端处理跨域的几种方式
  2. 自动化测试用例设计原则
  3. [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA 拓扑排序)
  4. 安卓中bundle的使用
  5. 在欲而无欲,居尘不染尘
  6. 20个方法让你摆脱坏习惯
  7. 如何做好产品经理一:你们是傻的吗?
  8. █年薪20万招聘软件工程师!!!
  9. VUE组件 之 Drawer 抽屉
  10. asyn4j -- java 异步方法调用框架