c++ - 在与父进程相同的监视器上运行进程
问题描述
我有一个用 C++ 编写的 MFC 应用程序,它通过ShellExecuteEx()
. 假设这两个应用程序都在双显示器系统上运行,我如何确保记事本与主应用程序在同一显示器上打开?
解决方案
您可以在结构的成员中设置SEE_MASK_HMONITOR
位,并在成员中指定所需监视器的句柄。您可以使用API 调用获取应用程序主窗口的监视器句柄。fMask
SHELLEXECTUTEINFO
hMonitor
MonitorFromWindow
以下代码(或非常类似的代码)应该可以解决问题:
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);
}
推荐阅读
- node.js - 在 electron-forge 应用程序中使用 express 提供静态文件
- amazon-web-services - AWS IAM:通过 CLI 报告凭证
- php - 如何在php中多维数组的其他键值之后首先回显相同的键值
- ios - Xcode 文件权限问题
- linux - 如何通过删除某些字符之间的内容来批量重命名文件名 Linux
- android - 如何解决“:app@releaseUnitTest/compileClasspath”的依赖关系
- swift - SwiftUI 上带有 TextField 的可删除表
- ios - 如何在 Flutter 中修复此错误“Swift Language Version”
- sql - Oracle 数据库 12c:ORACLE JSON 查询搜索
- apache-kafka - kafka-connect - s3-connector - JVM堆 - 估计堆大小计算