Qt调用win32 API 把第三方工具的窗口设置为最顶层

Qt调用win32 API 把第三方工具的窗口设置为最顶层

  • 添加win32静态库
    在工程目录添加
LIBS += User32.LIB
LIBS += Gdi32.LIB
  • 添加头文件
#include 
#include 
  • 查找成功与否的标志
bool bFinishShow;	//全局变量
  • 检测所有窗口的函数
BOOL MyEnumProc(HWND hwnd, LPARAM param)
{
    LPWSTR lpString = (LPWSTR)malloc(sizeof(WCHAR) * MAX_PATH);

    if (IsWindow(hwnd) &&IsWindowEnabled(hwnd) &&IsWindowVisible(hwnd))
    {
        if (GetWindowTextW(hwnd, lpString, MAX_PATH) > 0) {
            if(QString::fromStdWString(lpString) == "test.exe"){		//例如要找的窗口名称是‘test.exe’
                bFinishShow = true;
            }
        }
    }
    free(lpString);
    return TRUE;

}
  • 主函数,QProcess打开并且检测是否已经显示出来,显示出来则设置最顶层
bool Test::startTest(){
	QProcess process= new QProcess();
	bFinishShow = false;
    QString sCommand = QString("%1/test/test.exe").arg(QCoreApplication::applicationDirPath());
    process->start(sCommand);
    process->waitForStarted();
    while(EnumWindows(MyEnumProc, 0) && (!bFinishShow));
    HWND hwnds = FindWindowA(NULL,"test.exe");
    ShowWindow(hwnds,SW_SHOWNORMAL);
    SetWindowPos(
            hwnds,
            HWND_TOPMOST,
            0,
            0,
            0,
            0,
            SWP_NOMOVE|SWP_NOSIZE
        );
    return true;
}

以上步骤即可实现设置第三方工具界面最上层。

你可能感兴趣的:(C++,qt5)