我有一个用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/