4 ms·
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
by CrendKing 4y ago
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);