手头上有一项工作,每天要启动一个桌面程序。本来想依赖window的计划管理,但程序有个小bug,启动时会弹出一个窗口,需要点击确定按钮关闭弹窗后才能正常运行。
在网上搜索后,尝试着在VS2022 C++环境下,调用FindWindow函数和SendMessage函数来实现弹窗自动关闭功能。
基本思路:
1.调用FindWindow函数,找到需要处理的句柄对象,这可以通过在FindWindow函数中输入对象的标题名称来约束。
2.调用SendMessage函数,关闭句柄对象。
关闭计算器窗口的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
HWND hWndRcv = FindWindow(NULL, "计算器");
printf("%x\n", hWndRcv);
if (hWndRcv != NULL)
{
LRESULT tmp = SendMessage(hWndRcv, WM_CLOSE, NULL, NULL);
}
else
{
printf("未找到目标对话框\n");
}
return 0;
}
在实际调试过程中,FindWindow函数的第二个参数类型定义为LPCTSTR,实际传入的参数类型定义为char *,导致调试不通过。解决办法:在“工程属性”->“常规”->“字符集”中,选择“使用Unicode字符集”或是“使用多字节编码字符集”(即ANSI编码)。
参考资料:
https://jingyan.baidu.com/article/3c48dd34c3f3cde10be358da.html
https://blog.csdn.net/qq_21210467/article/details/86632327