Mam aplikację MFC napisaną w C ++, która uruchamia notatnik za pomocą ShellExecuteEx(). Zakładając, że oba aplikacje pracują w systemie podwójnego monitora, jak upewnić się, że Notatnik jest otwarty na tym samym monitorze co głównej aplikacji?

3
melanie93 8 grudzień 2019, 03:25

1 odpowiedź

Najlepsza odpowiedź

Możesz ustawić bit SEE_MASK_HMONITOR w {X1}} członek SHELLEXECTUTEINFO i określa uchwyt wymaganego monitora w elementach hMonitor. Możesz uzyskać uchwyt monitora głównego okna aplikacji za pomocą {x4}} Call API.

Poniższy kod (lub coś bardzo podobnego) powinno zrobić sztuczkę:

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);
}
3
Adrian Mole 8 grudzień 2019, 12:59