c++ - 在 Windows 中未调用 C++ WndProc 事件 WM_QUERYENDSESSION
问题描述
这是我的代码示例:
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdParam, int iCmdShow)
{
static char szAppName[] = "hidden window";
HWND hWnd = GetActiveWindow();
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_OWNDC;
wndclass.lpfnWndProc = WindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = NULL;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wndclass);
hWnd = CreateWindow(
szAppName,
"hidden window", // window caption
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, SW_HIDE);
UpdateWindow(hWnd);
// Some code
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
ofstream myfile;
myfile.open("log.txt", ios::app);
myfile << "I was called \n";
switch (uMsg)
{
case WM_QUERYENDSESSION:
{
myfile << "WM_QUERYENDSESSION CALLED\n";
return TRUE;
break;
}
}
myfile.close();
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
我注册了处理程序wndclass.lpfnWndProc = WindowProc;
,WindowProc 被触发了几次,并且仅在我启动应用程序时才写入“我被称为 \n”,但是当我关闭系统时,绝对没有任何内容写入 log.txt,因此不会触发处理程序。我尝试了不同的例子,但对我没有任何作用。有什么想法吗?
解决方案
推荐阅读
- python - 搜索作为列表的子集
- chef-infra - 有什么方法可以检索数据包中可用的厨师节点特定参数
- numpy - 在 EMR 中使用 Spark LSH 时出现“设备上没有剩余空间”错误和 SIGTERM 信号
- r - 根据条件搜索将数据框拆分为多个表
- c# - 折叠 TreeViewItem 在 Canvas 上的实际位置
- java - 通过 Charset 确定一个特殊字符
- java - Java Stream 平均值的最大值
- azure - 在 JSON DSC 中找不到 AdminCreds 参数
- windows - Sesman-Xvnc 对每个用户都抛出密码失败
- java - android.content.res.Resources$NotFoundException 加载活动时