首先说明,网上找了很多代码资源,运用在QT项目中都不能找到该窗口的句柄,即FindWindow返回的是0,后面在某讨论里面看见VS的编码为unicode,才解决了这个问题。
编译环境为QT 5.15.2 + vs2019 32bit,其他环境没试过。
步骤:
1、在pro文件里面添加:
win32{
LIBS += -luser32
}
2、源文件添加:
#include <Windows.h>
FindWindow头文件为WinUser.h,故我还添加了#include <WinUser.h>
3、使用spy++工具查找外部进程窗口的类名和标题名。具体怎么操作这里不做阐述。
4、具体代码为:
QString name = “Qt5QWindowIcon”;//窗口的类名
QString windowname = “xxx_1”;//窗口标题名
HWND hwnd = FindWindow((LPCWSTR)name.unicode(),(LPCWSTR)windowname.unicode());//查找窗口句柄
ShowWindow(hwnd,SW_RESTORE);//激活并置顶窗口,ShowWindow里面的参数可以网上搜一下,不同功能不同参数。
注意:
1、FindWindow分为FindWindowA 和FindWindowW,上面的格式为FindWindowW;另外,一定要加unicode转码,否则FindWindow返回为0。
2、FindWindow不知到其中某个参数可以填NULL,但是必须填一个。由于我这里需要打开两个相同的软件(类名相同,窗口名不同)故窗口类名一定要获取到。