c++ - 如何将 qprocess 带到前面?

标签 c++ windows qt qprocess

工作环境:C++,窗口 我使用 qprocess 打开了一个 matlab 独立应用程序 (xx.exe)。当用户按下按钮时,我想将 xx.exe 带到前面。如何使用 Qpr​​ocess 将 xx.exe 带到前面?

最佳答案

也许 QProcess::startDetached() 会帮助你(在我的例子中这个方法激活窗口)。但我认为窗口操作(如激活最小化隐藏)是操作系统问题。所以在大多数情况下,您必须请求操作系统进行窗口操作。

这是您可以尝试的 Windows 的小示例

WindowsUtils.h

class WindowsUtils
{
public:
    WindowsUtils();

    static bool ShowWindow(const qint64& pidQt);
    static bool MinimizeWindow(const qint64& pidQt);
    static bool RestoreWindow(const qint64& pidQt);
};

WindowsUtils.cpp

#include "WindowsUtils.h"
#include <windows.h>

int g_winState = SW_SHOW;

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    // get the window process ID
    DWORD searchedProcessId = (DWORD)lParam;
    DWORD windowProcessId = 0;
    GetWindowThreadProcessId(hWnd,&windowProcessId);

    // check the process id match
    if (windowProcessId == searchedProcessId){
        ShowWindow(hWnd, g_winState);
        return FALSE;
    }

    return TRUE;  //continue enumeration
}

WindowsUtils::WindowsUtils()
{

}

bool WindowsUtils::ShowWindow(const qint64 &pidQt)
{
    g_winState = SW_SHOW;
    return EnumWindows(EnumWindowsProc, (LPARAM)pidQt);
}

bool WindowsUtils::MinimizeWindow(const qint64 &pidQt)
{
    g_winState = SW_MINIMIZE;
    return EnumWindows(EnumWindowsProc, (LPARAM)pidQt);
}

bool WindowsUtils::RestoreWindow(const qint64 &pidQt)
{
    g_winState = SW_RESTORE;
    return EnumWindows(EnumWindowsProc, (LPARAM)pidQt);
}

使用

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

private:
    Ui::MainWindow *ui;
    qint64 m_pid;
};

void MainWindow::on_pushButton_3_clicked()
{
    m_pid = 0;
    QProcess::startDetached("notepad.exe", QStringList(), QString(), &m_pid);
}

void MainWindow::on_pushButton_4_clicked()
{
    WindowsUtils::RestoreWindow(m_pid);
}

void MainWindow::on_pushButton_5_clicked()
{
    WindowsUtils::MinimizeWindow(m_pid);
}

int g_winState; 的另一个值你会发现 here

关于c++ - 如何将 qprocess 带到前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55623311/

相关文章:

ruby-on-rails - 如何在 WSL 环境中使用 Better_errors 启动编辑器

qt - QProcess 用户权限提升

c++ - 如何重建 android jni c++ 文件(包括 opencv lib)

c - 让 Qt 调试器工作 (GDB)

c++ - 排序多维数组 C++ 奇怪的行为

c++ - std::bind 和 std::function 在回调中的使用

c++ - "CMakeLists.txt"似乎丢失了

c++ - 错误 :Unresolved external Symbol of d2d1effects. h DIRECTX 中的 CLSID_D2D1HueRotation 属性

c# - 在 C# 中选择单词部分

python - 可以使用 Windows 上的符号链接(symbolic link)将模块添加到 Python 搜索路径(例如 site-packages 目录)吗?