`
guowee
  • 浏览: 173635 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

PC中如何判断网络已经连接或者断开

阅读更多

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

分享到:
评论

相关推荐

    网络安全保障措施.docx

    实时的入侵检测及采取相应的防护手段,如记录证据用于跟踪和恢复、断开网络连接等。实时入侵检测能力之所以重要首先它能够对付来自内部网络的攻击,其次它能够缩短hacker入侵的时间。入侵检测系统可分为两类:基于...

    android手机网络聊天室

    本作品是完成android手机网络聊天室的设计,服务器开启后,客户端将绑定到本地的IP和端口,主要界面只有一个,以下是任务...如果某个客户端返回空值或者无法发送过去,那么表示该客户端已经断开,就从ArrayList中移除。

    用手机摄像头做视频摄像头

    注意 有机油 说不能使用高分辨率这个情况 这个可能与 相机本身 或者是手机本身的分辨率有关 小蜜已经给同学 本人只在戴妃上测试了 一切正常 如果有机油发现问题 或者是 找出解决的 办法 欢迎跟帖 谢谢

    中兴MF253升级工具(附固件).rar

    软件介绍: 中兴MF253工具和破解...进入后,关机,断电,插电,开机,就可以最大连接数 32了(10) 卡拔掉,可以设置3G或者4G网络(11) version.zip就是你要升级的文件,请不要解压,我也没有密码,无需解压的

    NetSupport School 课堂管理软件(简体中文版)

    可按教室、PC 名称、学生登录名进行连接,或者只需浏览网络来确定学生。 按 UserID 连接学生。 新的“任意学生”工具栏按钮可随机地选择学生机,供教师与之交互。 能够直接从教师端工具栏中选择学生数量进行随机...

    Server(打印服务器).docx

    在每台Windows 95计算机上添加本地打印机(注意是本地打印机而不是网络打印机),即将打印服务器连接的三台打印机的驱动程序安装到每台Pc上. 1 1.使打印作业发往打印服务器 Server(打印服务器)全文共3页,当前为第...

    EXE工具

    断开远程登录有两种方法 在Unix的$提示符下输入exit 这时提示与远程系统断开 或者是使用“连接”菜单的“断开”项断开 断开后 Telnet 窗口并不消失 再次连接时可用“连接”菜单的“远程系统” 宿主名称输入远程主机...

    adb1.0.26包含fastboot.exe

    注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。 no device —— 没有设备/模拟器连接。 以上输出显示当前已经连接了...

    如何查杀运行状态下的EXE、DLL病毒

    事实上,用不着这么麻烦,只要大家确认已经在BIOS中打开高级电源控制选项,同时选择ACPI Pc,一定不要选错,否则重启后可能无法进入Windows,并重新启动电脑,电脑可能会重新搜索并自动重新安装电脑的硬件,之后就...

    visual source safe 教程

    拆分文件之后,link按纽将不再显示已断开的连接,但你可以用path(file菜单中的properties项)按纽浏览拆分的历史记录。 共享(share)文件就是在多个项目间建立文件的连接。拆分(branch)文件就是在项目之间建立了...

    Visual stdio source safe 教程

    拆分文件之后,link按纽将不再显示已断开的连接,但你可以用path(file菜单中的properties项)按纽浏览拆分的历史记录。 共享(share)文件就是在多个项目间建立文件的连接。拆分(branch)文件就是在项目之间建立了...

    RouterOS2.9.6.with.crack及配置动画

    MikroTik RouterOS是一种路由操作系统,并通过该软件将标准的PC电脑变成专业路由器,在软件RouterOS 软路由图的开发和应用上不断的更新和发展,软件经历了多次更新和改进,使其功能在不断增强和完善。特别在无线、...

    Access 2000数据库系统设计(PDF)---001

    搜索 139第7章 链接、导入和导出表 1417.1 从其他应用或者向其他应用移动数据 1417.2 理解Access如何处理其他数据库文件 格式的表 1427.2.1 识别PC数据库文件格式 1437.2.2 链接和导入外部 ISAM表 1437.2.3 用ODBC...

    Access 2000数据库系统设计(PDF)---002

    搜索 139第7章 链接、导入和导出表 1417.1 从其他应用或者向其他应用移动数据 1417.2 理解Access如何处理其他数据库文件 格式的表 1427.2.1 识别PC数据库文件格式 1437.2.2 链接和导入外部 ISAM表 1437.2.3 用ODBC...

    Access 2000数据库系统设计(PDF)---018

    1417.1 从其他应用或者向其他应用移动数据 1417.2 理解Access如何处理其他数据库文件格式的表 1427.2.1 识别PC数据库文件格式 1437.2.2 链接和导入外部 ISAM表 1437.2.3 用ODBC链接Visual FoxPro表 1457.2.4 处理...

    Access 2000数据库系统设计(PDF)---003

    搜索 139第7章 链接、导入和导出表 1417.1 从其他应用或者向其他应用移动数据 1417.2 理解Access如何处理其他数据库文件 格式的表 1427.2.1 识别PC数据库文件格式 1437.2.2 链接和导入外部 ISAM表 1437.2.3 用ODBC...

    Access 2000数据库系统设计(PDF)---011

    1417.1 从其他应用或者向其他应用移动数据 1417.2 理解Access如何处理其他数据库文件格式的表 1427.2.1 识别PC数据库文件格式 1437.2.2 链接和导入外部 ISAM表 1437.2.3 用ODBC链接Visual FoxPro表 1457.2.4 处理...

    Access 2000数据库系统设计(PDF)---020

    1417.1 从其他应用或者向其他应用移动数据 1417.2 理解Access如何处理其他数据库文件格式的表 1427.2.1 识别PC数据库文件格式 1437.2.2 链接和导入外部 ISAM表 1437.2.3 用ODBC链接Visual FoxPro表 1457.2.4 处理...

Global site tag (gtag.js) - Google Analytics