News for hackers. Stuff that matters.
Re:Changing the primary display using the Win32 API by CrendKing on Sunday June 12, 2022 @07:56PM (#31719416)
Whichever monitor's position is set to (0, 0) is the primary monitor. The following code assumes you have two monitors, and swaps the primary. Of course, to be more robust, you should not hard code the indices but do checking on the info types.

    let mut num_paths = MaybeUninit::uninit();
    let mut num_mode_infos = MaybeUninit::uninit();
    GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, num_paths.as_mut_ptr(), num_mode_infos.as_mut_ptr());

    let mut paths = vec![Default::default(); num_paths.assume_init() as _];
    let mut mode_infos = vec![Default::default(); num_mode_infos.assume_init() as _];

    QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, num_paths.as_mut_ptr(), paths.as_mut_ptr(), num_mode_infos.as_mut_ptr(), mode_infos.as_mut_ptr(), null_mut());
    (mode_infos[1].Anonymous.sourceMode.position, mode_infos[3].Anonymous.sourceMode.position) = (mode_infos[3].Anonymous.sourceMode.position, mode_infos[1].Anonymous.sourceMode.position);
    SetDisplayConfig(&paths, &mode_infos, SDC_APPLY | SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC_ALLOW_CHANGES);

There are no comments on this comment yet.