c++ - 如何在Windows服务中检测从 sleep 模式唤醒?

标签 c++ winapi

美好的一天!我编写了一个 Windows 服务,它检测 USB 闪存驱动器连接并对连接的驱动器执行某些操作。现在经过测试,我需要在从 sleep 模式唤醒后重新处理设备。当服务作为 Windows 程序工作时,我解决了这个问题。为了解决这个问题,我另外处理了DBT_DEVNODES_CHANGED,但服务没有收到此消息,它只收到DBT_DEVICE_ARRIVALDBT_DEVICEREMOVECOMPLETE。当系统进入休眠状态并且我没有收到任何消息时,我还尝试检查服务处理的所有消息(SERVICE_CONTROL_DEVICEEVENTSERVICE_CONTROL_STOP 除外)。

如何确定系统何时唤醒?

最佳答案

普通应用程序会收到 WM_POWERBROADCAST:PBT_APMRESUMEAUTOMATIC 窗口消息,但如果服务没有窗口,则不会收到此消息。但是,服务可以在其 HandlerEx 中接收 SERVICE_CONTROL_POWEREVENT回调函数,参数与WM_POWERBROADCAST

相同

Notifies a service of system power events. The dwEventType parameter contains additional information. If dwEventType is PBT_POWERSETTINGCHANGE, the lpEventData parameter also contains additional information.

在 Windows 8 及更高版本上,您还可以使用 PowerRegisterSuspendResumeNotification()功能:

Registers to receive notification when the system is suspended or resumed.

相当于 WM_DEVICECHANGE 的服务是 SERVICE_CONTROL_DEVICEEVENT:

Notifies a service of device events. (The service must have registered to receive these notifications using the RegisterDeviceNotification function.) The dwEventType and lpEventData parameters contain additional information.

关于c++ - 如何在Windows服务中检测从 sleep 模式唤醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942716/

相关文章:

c++ - pthreads的性能差异

c++ - 由 const 引用传递的参数的可变左值引用

c++ - 如果我将 C :\Program Files in 32 bit app on Win7 64 bit, 设置为 C 0x104567911,文件重定向不起作用,它是否应该导航到 (x86) 文件夹?

c++ - 性能计数器索引 windows pdh c

c++ - 如何在 C++ 中去掉 -0

c++ - 如何使用向后 cpp 在 ARM 上获取堆栈跟踪

c++ - 调用多个内核,全局内存性能 - CUDA

windows - 如何停止在任务栏上显示我的应用程序?

c# - 为什么 C#(相当慢)和 Win32/C 之间的性能差异?

c - 使用 C 查询自定义 DNS 服务器