转载

在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. python模块之正则

    re模块 可以读懂你写的正则表达式 根据你写的表达式去执行任务 用re去操作正则 正则表达式 使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容.在线测试网站:http:/ ...

  2. IOS开发中缓存策略

    为了节约流量,同时也是为了更好的用户体验,目前很多应用都使用本地缓存机制,其中以网易新闻的缓存功能最为出色.我自己的应用也想加入本地缓存的功能,于是我从网上查阅了相关的资料,发现总体上说有两种方法.一 ...

  3. 第34-2题:LeetCode113. Path Sum II

    题目 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ ...

  4. 基础篇(1):c++程序基本结构

    本人是初中生,原用Pascal语言,现转c++,所以写几篇博客,分享一下. 补一句,我是一边转c++一边写博客,所以可能会有错误,望过路大神能指出. 参考书籍:<信息学奥赛一本通>< ...

  5. 查询删除的SAP凭证

    标准报表查询:RSSCD100 函数模块:CHANGEDOCUMENT_DISPLAY, Display Change Documents 数据表查询:CDHDR, Change document h ...

  6. Struts2基础入门

    Struts2基础入门 创建一个web工程 0)导包并且创建一个核心配置文件 <?xml version="1.0" encoding="UTF-8"?& ...

  7. C#进阶学习笔记(个人整理)

    学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...

  8. Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)

    在python中一共有两种作用域:全局作用域和函数作用域全局作用域:在全局都有效,全局作用域在程序执行时创建,在程序执行结束时销毁:所有函数以外的区域都是全局作用域:在全局作用域中定义的变量,都属于全 ...

  9. Python全栈day 03

    Python全栈day 03 一.运算符补充 in ,逻辑运算符,判断某字符或某字符串是否在一个大的字符串中,输出得到bool型数据. value = '我是中国人' v = '我' if v in ...

  10. 010---Django与Ajax

    预备知识: 什么是Json? 定义:json是一种轻量级的数据交换格式. 如果我们要在不同的编程语言中传递对象,就必须把对象序列化为标准格式,比如XML,但那是以往的时代,现在大多数使用序列化为jso ...