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

苏苏苏苏苏子墨

苏苏苏苏苏子墨

2016-02-19 17:40

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的如何快速检测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调用起来更方便:)

  示例代码如下:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  

// 定义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
{
   // 连接不成功
   ...
}

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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

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

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

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
如何快速检测PocketPC是否已经连接到PC上

eMule如何连接到Kademlia

电脑网络
eMule如何连接到Kademlia

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何让Guest账号快速连接远程pc

电脑入门
如何让Guest账号快速连接远程pc

鲁大师无法连接到硬件检测服务解决办法

电脑网络
鲁大师无法连接到硬件检测服务解决办法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何自测是否已经怀孕

怀孕
如何自测是否已经怀孕

如何检测胎儿是否成熟

怀孕 孕期 孕妇
如何检测胎儿是否成熟

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Base64编码

Base64编码

网页宽度是多少能符合用户浏览

网页宽度是多少能符合用户浏览
下拉加载更多内容 ↓