4 ms·
But I don't see a way to set the primary display using those calls, or am I missing something?
by michidk 4y ago
But I don't see a way to set the primary display using those calls, or am I missing something?
- CrendKing 4y agoWhichever 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);