`
guowee
  • 浏览: 176665 次
  • 性别: 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);
}

分享到:
评论

相关推荐

    在Pocket PC中设置GPRS连接

    4. **处理网络事件**:连接过程中可能会遇到各种网络事件,如连接成功、断开、超时等,需要编写适当的错误处理和状态监控代码。 5. **保持连接**:在GPRS连接上维持会话可能需要处理网络中断和重连的情况。一旦连接...

    实现使用C#代码完成wifi的切换和连接功能

    Windows操作系统提供了Wi-Fi管理API,也称为Native Wifi API,它允许开发者通过编程方式管理无线网络连接。这个API包含在`wlanapi.dll`动态链接库中,可以通过P/Invoke(平台调用)技术在C#中使用。 2. **添加P/...

    STM32单片机作TCP服务器,实现PC多客户端连接Demo

    在`NETCONN_TCP (UCOSIII)F750`这个文件中,我们可以找到具体的代码实现,包括UCOSIII实时操作系统对任务管理和资源调度的实现,以及lwIP如何在STM32F750上进行网络连接的配置和管理。分析这个文件将有助于深入理解...

    pb中如何判断sqlserver数据库服务的状态控制启动关闭

    首先,通过创建`Connection`对象并设置相关属性来判断网络中是否存在指定名称的服务器: ```powerbuilder connection myconnect myconnect = createconnection myconnect.driver = "WinSock" myconnect.application...

    uni-app中H5、PC端websocket使用

    考虑到WebSocket连接可能会占用较多资源,对于大量并发用户的情况,可能需要对连接池进行管理,或者使用服务端推送技术来减少客户端的连接数量。 以上就是在uni-app中实现H5和PC端WebSocket通信的关键点。在实际...

    C#利用ManagedWifi获取当前已经连接的WIFI的名称(SSID)

    这个库封装了Windows的WlanAPI,使得处理无线网络连接变得更加容易。例如,我们可以通过ManagedWifi库查询无线网络的状态,连接或断开网络,以及获取SSID等信息。 为了获取当前已连接的Wi-Fi网络的SSID,我们需要做...

    linux arm与PC机网络数据传输

    在IT行业中,Linux ARM平台与PC机之间的网络数据传输是一个重要的课题,特别是在嵌入式系统和物联网(IoT)领域。本项目通过Java语言实现,为ARM9处理器上的Linux系统和PC之间提供了一种文件传输机制。下面我们将深入...

    TCP.zip_PC机与WINCE_tcp_wince 网络 tcp

    在IT行业中,网络通信是至关重要的一个领域,特别是在嵌入式系统和PC机之间的交互。本文将详细讨论标题“TCP.zip_PC机与WINCE_tcp_wince 网络 tcp”所涉及的知识点,以及如何在局域网环境中,通过TCP/IP协议实现PC机...

    Pocket PC中如何使用函数拨号上网

    这在监控网络连接的健康状况,比如是否已连接、连接速度等,或者在连接中断后重新建立连接时非常有用。通过实时获取连接状态,开发者可以及时响应网络变化,提供更好的用户体验。 ### ConnMgrEnumDestinations 此...

    pctcp dos的软件包

    标题 "pctcp dos的软件包" 指的是一个专为DOS操作系统设计的网络连接工具,名为PCTCP。在个人计算机技术早期,DOS(Disk Operating System)是主流的操作系统,而PCTCP则是一个允许DOS系统通过TCP/IP协议进行网络...

    宽带连接自动生成器,无需手动联网

    在标签“软件”中,我们可以推断这是一个应用程序,可能是桌面应用或者是一款系统工具,它的主要功能是处理与网络连接相关的任务。这类软件通常包括但不限于以下功能:自动检测网络环境、创建网络配置文件、保存用户...

    进程分析工具PCHunter_free.zip

    4. 网络连接监控:它能展示当前系统的所有网络连接,包括TCP和UDP连接,用户可以断开可疑的网络连接,防止信息泄露或黑客入侵。 5. 文件系统查看:工具能够查看硬盘上的文件和文件夹,包括系统隐藏文件,有助于识别...

    Mac iNode 7.3 H3C_iNode_PC_7.3_E0517

    5. **断开与管理**:用户可以在客户端界面中随时断开网络连接,或者查看网络状态和设置。 需要注意的是,由于iNode是特定环境下的网络接入工具,其使用效果和功能可能受到网络管理员的策略限制。此外,尽管这款工具...

    Android应用源码安卓与PC的Socket通信项目C#版+Java版_串口通讯.zip

    例如,当连接断开时,Android应用和服务应尝试重新连接,或者向用户显示错误信息。PC端同样需要处理断开连接的情况,并可能需要提供一种机制来管理和释放资源。 此外,数据的序列化和反序列化也是通信过程中的关键...

    ConnectStar:自动拨号连接断开连接计时器

    5. 自动断开连接:计时结束,ConnectStar调用rasdial命令的断开功能,结束网络连接。 Java作为跨平台的编程语言,使得这款应用可以在任何安装有Java运行环境的Windows系统上运行。这为用户提供了便利,因为他们无需...

    PCHunter工具

    4. **网络连接管理**:显示所有活跃的网络连接,包括TCP和UDP连接,可以断开可疑的网络连接,防止信息泄露。 5. **驱动管理**:列出系统中已加载的驱动程序,用户可以禁用或卸载可疑驱动,防范驱动级别的攻击。 6....

    pc电脑端蓝牙调试助手

    这个工具帮助用户通过蓝牙连接测试和优化设备之间的数据传输,尤其是在硬件开发、物联网(IoT)项目或者嵌入式系统开发中非常常见。 在描述中,“蓝牙调试助手 通信 PC电脑端 串口调试 bluetooth socket”提到了几个...

    基于TCP协议的工业PC与PLC以太网通信

    当工业PC作为客户端时,需要编写特定的通信程序来与PLC建立连接,这与常规的PC间网络通信有所不同。通信的方式可以根据需求选择长连接或短连接,其中长连接更适合PLC的周期性工作模式,因为PLC通常采用循环扫描的...

    STM32客户端连接PC服务端01服务器端向客户端通讯C#服务端源代码_rezip.zip

    2. TCP连接管理:建立连接、保持连接状态和断开连接。 3. 数据收发:使用阻塞或非阻塞模式读写数据,处理TCP的滑动窗口机制。 4. 错误处理:处理网络中断、超时和数据校验错误。 5. 协议栈的使用:理解并正确使用TCP...

    PC端采用Visual C++实现ppi开关量输出

    例如,当PLC断开连接时,程序应能检测到这一情况,并尝试重新连接。此外,为了确保数据的一致性,每次写入操作前后,可以进行读取操作,检查PLC的实际输出状态是否与预期相符。 最后,不要忘记在程序结束时关闭与...

Global site tag (gtag.js) - Google Analytics