如何快速检测PocketPC是否已经连接到PC上

如果在程序中检测PocketPC(以下简称PPC)是否已经连接到PC上。PocketPC SDK提供了一组RAPI函数,我们可以通过其中的CeRapiInit或者CeRapiInitEx来检测。

先说CeRapiInit,它的定义是:

HRESULT CeRapiInit(void);

这个函数调用起来比较简单一些,只需要检测其返回值就可以。但是当PPC并没有连接到PC上时,该函数会一直等待而不返回,也就是说让当前的线程死锁了。一直等到PPC与PC连接成功的时候才会返回一个S_OK值。

假设一个程序必须在已知PPC与PC连接成功的情况下执行某种操作,如果已经连接,那么好办,CeRapiInit返回S_OK;如果没有连接,那么CeRapiInit一直等待,用户会认为程序死掉了。

还好我们有另一个函数CeRapiInitEx,这个函数原形是:

HRESULT CeRapiInitEx(RAPIINIT *pRapiInit);

该函数功能与CeRapiInit相当,区别在于它会立即返回,但是返回值并不代表PPC与PC的连接情况。我们还需要写额外的代码来检测是否连接成功。请注意该函数需要有一个参数RAPIINIT *pRapiInit,其中RAPIINIT定义如下:

typedef struct _RAPIINIT {
DWORD cbSize;    // RAPIINIT结构的大小
HANDLE heRapiInit;  // 一个Event的Handle
HRESULT hrRapiInit; // 返回连接是否建立成功
} RAPIINIT;

MSDN的官方做法是使用MsgWaitForMultipleObjects函数来监视该结构中的heRapiInit变量,实验证明,用WaitForSingleObject也可以完成该操作,而且WaitForSingleObject调用起来更方便:)

示例代码如下:

// 定义RAPIINIT结构变量
RAPIINIT ri;
// 将该变量的大小赋予cbSize参数,这个是Windows SDK编程中常用的操作
// 不知者请查阅相关资料
ri.cbSize = sizeof(RAPIINIT);
// 调用CeRapiInitEx函数,该函数立即返回
// 注意,其返回值并不代表PPC与PC的连接状态
HRESULT hInitResult=CeRapiInitEx(&ri);
// 这里用WaitForSingleObject来跟踪heRapiInit这个Event
DWORD dwWaitResult=WaitForSingleObject(ri.heRapiInit,2000);
// 检测是否连接成功
if(hInitResult==S_OK && ri.hrRapiInit==S_OK && dwWaitResult!=WAIT_TIMEOUT)
{
   // 连接成功
   ...
}
else
{
   // 连接不成功
   ...
}

好了,到这里代码已经写完,要注意:

这个检测过程并不规范,但是不会有太大的问题,关键在于WaitForSingleObject的最后一个参数的值如何设置,也就是说这个是个经验值。根据我的经验,如果PPC与PC已经连接,那么检测的过程将在不到1秒的时间内完成;如果没有连接,那么最长的等待时间也不会超过2秒。

好了,第一次写开发,水平有限,希望大家指正。

时间: 2024-09-10 09:52:17

如何快速检测PocketPC是否已经连接到PC上的相关文章

JavaScript快速检测浏览器对CSS3特性的支持情况_javascript技巧

在项目中需要快速检测浏览器是否支持某CSS3特性,比如检测是否支持"transform",然后我的布局会有两种完全不同的版式. 当然除开本文介绍的这种快速方法,还有一种更有名和更通用的方法,那就是modernizr,运行脚本之后它会在html的class上加上浏览器支持的所有特性的列表. 优点: js是可配置的,不需要的特性检测可以在配置脚本中去掉基于特性检测js库简单好用 除此之外还有一种不太好的方法,那就是判断浏览器的UA,不好的原因是UA可能会伪造,而且版本判断繁琐,还有不稳定.

如何快速检测到应用中哪里有内存泄露?

问题描述 如何快速检测到应用中哪里有内存泄露?最好能有详细的步骤 解决方案 解决方案二:你用JAVA自带宾jconsole就能监控-

快速检测数据异常,以色列大数据公司Anodot获800万美元风险投资

快速检测数据异常,以色列大数据公司Anodot获800万美元风险投资 责任编辑:editor007 作者:aiko |  2016-09-23 22:26:42 本文摘自:36kr   对于广告科技.电子商务及物联网领域内以数据为中心的企业来说,每天都需要分析大量的指标数据,分析方式通常是手动或者是传统企业智能工具,这样操作起来费时费力,并且要求操作人员有专业的知识.以色列大数据初创企业 Anodot 针对这一问题,想利用专利机器学习算法解决这一困境. 9 月 22 日,Anodot 宣布获得

分享站长快速检测网站是否被挂马的三方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站被挂马或者被挂暗链说明网站的管理权限已落入他人之手,而且网站被挂马往往来给网站带来不可估量的负面影响,最常见的就是网站用户体验变形.网站被降权甚至是被K,而对于网站被马之后,很多站长都不能及时的发现并处理,导致网站出现状况后才有所感概.那么站长应该如何去防范这个网站最大的杀手呢?站长如何去检查自己的网站是否被挂马了呢?今天笔者以亲身经历来

系统-驱动开发中,设备是如何挂接到驱动上的???(大致的过程即可)

问题描述 驱动开发中,设备是如何挂接到驱动上的???(大致的过程即可) 问题: 1.基于dts/dtsi的内核系统,是通过dts/dtsi的读取来注册设备的吗?如果不是,那设备注册/挂接的 操作在哪实现的? 2.在static struct i2c_driver 结构中, .driver = { .name .owner = THIS_MODULE, .of_match_table }, .id_table }; of_match_table 与id_table 的作用??? 解决方案 基于dt

【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本

问题描述 解决方法 先了解compile comsquareupokhttpokhttp240的意义 了解Jcenter和Maven jcenter Maven Central 理解jcenter和Maven Central 快速搜索方法1 快速搜索方法2 快速搜索方法3 因此要注意看你是想要那个版本的 问题描述 今天有个android开发者问了我下面的问题: 问个问题 比如我想找最新的okhhtp compile的最新那句话 compile 'com.squareup.okhttp:okhtt

多个 可移动磁盘-android设备通过usb连接到pc显示多个“可移动磁盘”问题

问题描述 android设备通过usb连接到pc显示多个"可移动磁盘"问题 请教各位大侠,我现在做的产品连接电脑显示3个可移动磁盘(系统的sdcard.外置的SD卡.sata硬盘) 我希望连接电脑时只显示对应sata盘的那一个可移动磁盘(在android的USB大容量存储设备中选择打开USB存储设备sata盘),咋操作的呢,谢谢了!

网站被腾讯手机管家检测危险网站,不能再浏览器上打开怎么办?求高手帮忙

问题描述 我的网站被腾讯手机管家检测危险网站,不能再浏览器上打开怎么办?求高手帮忙 解决方案 解决方案二:卸载腾讯管家解决方案三:..二楼是正解

如何快速检测定位局域网中的ARP病毒电脑

面对着局域网中成百台电脑,一个一个地检测显然不是好办法.其实我们只要利用ARP病毒的基本原理:发送伪造的ARP欺骗广播,中毒电脑自身伪装成网关的特性,就可以快速锁定中毒电脑.可以设想用程序来实现以下功能:在网络正常的时候,牢牢记住正确网关的IP地址和MAC地址,并且实时监控着来自全网的ARP数据包,当发现有某个ARP数据包广播,其IP地址是正确网关的IP地址,但是其MAC地址竟然是其它电脑的MAC地址的时候,这时,无疑是发生了ARP欺骗.对此可疑MAC地址报警,在根据网络正常时候的IP-MAC地