今天有个客户在我的MOBILE手机上做开发,遇到个需要检测POWER键RESUME的问题. 他们直接说在应用层检测这个是不可能的.
那么我们就把不可能变成可能, 无非就是熟悉一下微软的游戏规则而已.

下面给出的代码,在整个程序开始时, 调用InitPowerNotify一下, 建立起MSG QUEUE和NOTIFY, 然后开个线程读MSG QUEUE等待RESUME触发. 如果等到RESUME事件, 则在PowerThread的TBD处加入处理代码, 如果程序结束, 那么调用一下EndPowerNotify, 把线程结束掉把HANDLE清理掉.

以下代码在WM6.1上验证过可用。里面我写了很多DBGMSG, 这个是我自己做的一个把LOG写到文件里的函数, 用户可以删掉. 由于程序去检测POWER RESUME, 之前一定会有一次POWER SLEEP, 那么USB线连着VS2005调试就断掉了,所以只能把LOG写到文件里来看,而无法单步调试或把LOG输出到VS2005的OUTPUT窗口.

最后我有个疑问, 在反初始化时, 我调用StopPowerNotifications结果返回值是FALSE, 代表该函数失败,但是立刻GetLastError得到的ERR号却也是0. 有没有高人能够解释一下?

  1在WM6应用层代码检测POWER键RESUME动作#include <windows.h>
  2在WM6应用层代码检测POWER键RESUME动作#include <pm.h>
  3在WM6应用层代码检测POWER键RESUME动作#include <Msgqueue.h>
  4在WM6应用层代码检测POWER键RESUME动作
  5在WM6应用层代码检测POWER键RESUME动作#define QUEUE_ENTRIES 3
  6在WM6应用层代码检测POWER键RESUME动作#define MAX_NAMELEN 200
  7在WM6应用层代码检测POWER键RESUME动作#define QUEUE_SIZE (QUEUE_ENTRIES * sizeof(POWER_BROADCAST) + MAX_NAMELEN)
  8在WM6应用层代码检测POWER键RESUME动作#define MSGQ_NAME TEXT("PowerNotify")
  9在WM6应用层代码检测POWER键RESUME动作#define EXIT_THREAD_MSG 0x12345678
 10在WM6应用层代码检测POWER键RESUME动作
 11在WM6应用层代码检测POWER键RESUME动作static BOOL g_bPowerEnd = FALSE;
 12在WM6应用层代码检测POWER键RESUME动作static HANDLE g_hNoti = NULL;
 13在WM6应用层代码检测POWER键RESUME动作static HANDLE g_hMsgQ = NULL;
 14在WM6应用层代码检测POWER键RESUME动作static HANDLE g_hPowerThread = NULL;
 15在WM6应用层代码检测POWER键RESUME动作
 16在WM6应用层代码检测POWER键RESUME动作
 17在WM6应用层代码检测POWER键RESUME动作DWORD WINAPI PowerThread(PVOID pParam)
 18

相关文章:

  • 2022-12-23
  • 2021-08-15
  • 2022-01-15
  • 2022-12-23
  • 2021-08-17
  • 2021-10-21
  • 2021-06-10
猜你喜欢
  • 2021-11-29
  • 2021-05-28
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
  • 2021-11-23
  • 2021-11-15
相关资源
相似解决方案