我有一个用C++编写的MFC应用程序,可通过ShellExecuteEx()启动记事本。假设两个应用程序都在双监视器系统上运行,如何确保在与主应用程序相同的监视器上打开记事本?

最佳答案

您可以在 SEE_MASK_HMONITOR 结构的fMask成员中设置SHELLEXECTUTEINFO位,并在hMonitor成员中指定所需监视器的句柄。您可以使用 MonitorFromWindow API调用获取应用程序主窗口的监视器句柄。

以下代码(或类似的代码)应该可以解决问题:

void RunNotepadOnMyMonitor() {
    SHELLEXECUTEINFO sei;
    memset(&sei, 0, sizeof(SHELLEXECUTEINFO));
    sei.cbSize = sizeof(SHELLEXECUTEINFO);
    sei.fMask = SEE_MASK_HMONITOR;
    sei.lpVerb = _T("open");        // Optional in this case: it's the default
    sei.lpFile = _T("notepad.exe");
    sei.lpParameters = nullptr;     // Add name of file to open - if you want!
    sei.nShow = SW_SHOW;
    sei.hMonitor = ::MonitorFromWindow(AfxGetMainWnd()->GetSafeHwnd(), MONITOR_DEFAULTTONEAREST);
    ShellExecuteEx(&sei);
}

关于c++ - 在与父进程相同的监视器上运行进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59231466/

10-10 14:48