windows C++ 非窗口程序监听休眠消息代码示例,WndProc仅处理休眠和退出休眠消息忽略睡眠消息
时间: 2024-04-07 21:31:52 浏览: 24
以下是一个监听休眠消息的C++代码示例,仅处理休眠和退出休眠消息,忽略睡眠消息:
```cpp
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_POWERBROADCAST:
switch (wParam)
{
case PBT_APMQUERYSUSPEND:
// 处理休眠消息
return BROADCAST_QUERY_DENY;
case PBT_APMRESUMESUSPEND:
// 处理退出休眠消息
break;
}
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int main()
{
HWND hwnd = CreateWindow("STATIC", "MyWindow", 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
if (hwnd == NULL)
return 0;
RegisterPowerSettingNotification(hwnd, &GUID_MONITOR_POWER_ON, DEVICE_NOTIFY_WINDOW_HANDLE);
RegisterPowerSettingNotification(hwnd, &GUID_CONSOLE_DISPLAY_STATE, DEVICE_NOTIFY_WINDOW_HANDLE);
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
```
该代码创建了一个无窗口的窗口,并重写了WndProc函数来处理Windows消息。在WndProc函数中,我们通过WM_POWERBROADCAST消息来监听系统的休眠和退出休眠消息。当收到PBT_APMQUERYSUSPEND消息时,表示系统即将进入休眠状态,我们可以在此处处理休眠相关的操作。当收到PBT_APMRESUMESUSPEND消息时,表示系统从休眠状态中恢复,我们可以在此处处理退出休眠相关的操作。
需要注意的是,我们使用了RegisterPowerSettingNotification函数来注册GUID_MONITOR_POWER_ON和GUID_CONSOLE_DISPLAY_STATE两个消息。这样可以保证我们能够收到Windows系统的休眠和退出休眠消息,忽略睡眠消息。
另外,由于我们创建的是无窗口的窗口,所以我们只能通过RegisterPowerSettingNotification函数来注册消息,而不能使用CreateWindow函数来创建窗口。另外,我们需要在程序结束时调用UnregisterPowerSettingNotification函数来注销注册的消息。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)