windows C++ 非窗口程序监听休眠消息代码示例,WndProc仅处理休眠消息忽略睡眠消息
时间: 2024-04-07 22:31:56 浏览: 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 WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASS wc = { 0 };
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = "MyClass";
RegisterClass(&wc);
HWND hwnd = CreateWindow("MyClass", "MyWindow", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
return 0;
ShowWindow(hwnd, nShowCmd);
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消息时,表示系统从睡眠状态中恢复,我们可以在此处处理睡眠相关的操作。
需要注意的是,在处理休眠消息时,我们需要返回BROADCAST_QUERY_DENY以拒绝系统进入休眠状态。这是因为在进入休眠状态前,系统会向所有的应用程序发送PBT_APMQUERYSUSPEND消息,询问是否允许系统进入休眠状态。如果我们返回BROADCAST_QUERY_DENY,表示不允许系统进入休眠状态,系统会取消休眠操作。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)