转载

在PPC的开发中有时需要判断网络什么时候连接,什么时候断开,并且做出相应的处理。比如说TimeSyncPPC程序,就需要在网络连接之后得到消息然后去下载时间同步信息,因此就必须要一种方法让TimeSyncPPC程序在PPC连接网络之后得到系统的消息。当然有人说可以不断去轮询看系统是否连接到网络了,但这绝对不是一个好方法。

在编程WM平台的网络应用程序时,需要判断当前是否连接了网络,方法有两种:

1. InternetGetConnectedState()  

参数具体看MSDN

这种方法不能实时检测网络。

2. 可以实时检测网络

其实Windows Mobile 5.0之后微软已经提供了一个专门的函数来得到网络状态变化的Notification,我们要做的就是等待这个消息,函数如下:

HRESULT WINAPI ConnMgrRegisterForStatusChangeNotification(
   BOOL   fEnable,
   HWND   hWnd
);

这个函数是通知系统将网络状态变化的Notification发给指定的窗口,返回值有三个:

S_OK   The function call was successful.

E_HANDLE   The supplied window handle is invalid.

E_ACCESSDENIED   The calling process does not have sufficient privileges to use this function.

当网络连接或者断开时,ConnMgrRegisterForStatusChangeNotification函数会发送 CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG的消息给窗口,但是其实看 CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG的定义,它并不是一个消息,只是一个字符串:

#define CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG TEXT("CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG")

所以使用这个消息之前还需要注册这个消息:

m_ConnectMsg = RegisterWindowMessage(CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG);

返回值m_ConnectMsg就是传递到窗口的消息。

收到CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG 的消息之后可以根据wParam来判断是断开还是连接上网络。测试发现,连接ActiveSync、GPRS(无论是cmwap或是cmnet)、 WIFI甚至打电话挂电话都会触发这个消息,在实际使用时还需要注意。

另外,微软的文档中有一个错误,经常把函数 ConnMgrRegisterForStatusChangeNotification错写成 ConnMgrRegisterForStatusNotification,所以如果看到 ConnMgrRegisterForStatusNotification这个函数,其实就是指的 ConnMgrRegisterForStatusChangeNotification函数。

下面是一个实际的例子,如有疑问请在www.17feixiang.com留言:

#include "connmgr_status.h"
#include "connmgr.h"
#pragma comment(lib,"wininet.lib")
#pragma comment(lib,"cellcore.lib")

UINT m_ConnectMsg;

BOOL CXXXXDlg::OnInitDialog()
{
     ......

HRESULT ret = ConnMgrRegisterForStatusChangeNotification(TRUE, this-〉m_hWnd);
     m_ConnectMsg = RegisterWindowMessage(CONNMGR_STATUS_CHANGE_NOTIFICATION_MSG);

return TRUE;   // return TRUE   unless you set the focus to a control
}

LRESULT CXXXXDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
     // TODO: Add your specialized code here and/or call the base class
     if(message == m_ConnectMsg)
     {
         switch(wParam)
         {
         case CONNMGR_STATUS_CONNECTED :

MessageBox(_T("Connected"));
             break;
        
         case CONNMGR_STATUS_DISCONNECTED :
            
             MessageBox(_T("DISCONNECTED"));
             break;

default :
            
             break;
         }
     }

return CDialog::WindowProc(message, wParam, lParam);
}

PPC Windows Mobile判断网络(gprs)连接与否代码的更多相关文章

  1. android 开发中判断网络是否连接的代码

    在android的开发中,尤其是与访问网络有关的开发,都要判断一下手机是否连接上了网络,下面是一个判断是否连接网络的嗲吗片段: package cn.com.karl.util; import com ...

  2. Reachability(判断网络是否连接)

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  3. 判断网络是否连接 和 判断GPS是否连接

    //判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1  //设置默认连接的状态为-1 Co ...

  4. Android判断网络是否连接

    <!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK ...

  5. Reachability判断网络是否连接

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  6. c# 判断网络是连接到互联网

    方法1:InternetGetConnectedState         [System.Runtime.InteropServices.DllImport("wininet") ...

  7. Android中判断网络是否连接并提示设置

    /** * 判断网络是否连通 * @param context * @return */ public static boolean isNetworkConnected(Context contex ...

  8. android 判断网络是否连接

    package com.liucanwen.baidulocation.util; import android.app.Activity; import android.content.Contex ...

  9. Win10系统windows mobile设备中心无法连接WinCE采集器

    1.开始-->运行,输入services.msc回车 2.在打开的服务界面中,找到“基于Windows Mobile 2003的连接设备” 3.右击属性,修改成自动 4.点击登陆选项卡,选择本地 ...

随机推荐

  1. rabbitmq安装使用

    使用 http://www.open-open.com/lib/view/open1325131828249.html ubuntu:apt-get install erlang-noxsudo ap ...

  2. 第19章 通讯的基本概念—零死角玩转STM32-F429系列

    第19章     通讯的基本概念 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ...

  3. python main

    python中的main函数,总体来说就是,main比较适合写test测试,有点类似于java中的testcase,就是程序单独运行时是运行main的,但是当被调用时就不会运行main了.具体可以参考 ...

  4. ImportError : cannot import name main

    当我们有时候安装不成功插件或者其他模块时候,会有pip报错hu@hu-VirtualBox:~/下载/MySQL-python-1.2.4b4$ pip install pymysqlTracebac ...

  5. 用FileReader对象获取图片base64代码并预览

    MDN中FileReader的详细介绍: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 用FileReader获取图片base ...

  6. LeetCode297. Serialize and Deserialize Binary Tree

    题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法来实 ...

  7. vs code配置c/c++调试环境+mingw+windows

    目录 1.安装codeblocks 2.配置mingw环境变量 3.配置.vscode文件夹的json文件 ref 1.安装codeblocks 我已经安装过vscode和c++扩展插件,现在需要g+ ...

  8. BZOJ1008: [HNOI2008]越狱(组合数)

    题目描述 监狱有连续编号为 1…N1…N 的 NN 个房间,每个房间关押一个犯人,有 MM 种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱. ...

  9. MySQL为何不建议使用null列

      Preface       Null is a special constraint of columns.The columns in table will be added null cons ...

  10. python__基础 : 类的继承,调用父类的属性和方法

    1.继承,调用父类属性方法 在python里面,继承一个类只需要这样写: class Animal: def heshui(self): print('动物正在喝水') class Cat(Anima ...