Login / Register
▼
Binary Fortress
Binary Fortress Software
CheckCentral
ClipboardFusion
CloudShow
DisplayFusion
FileSeek
HashTools
LogFusion
Notepad Replacer
Online Base64 Decoder
Online Base64 Encoder
Online JSON Formatter
ShellSend
TrayStatus
VoiceBot
WallpaperFusion
Window Inspector
More Apps...
DisplayFusion
CheckCentral
CloudShow
ClipboardFusion
FileSeek
VoiceBot
WallpaperFusion
Home
▼
Download
Download
Change Log
Download Beta
Beta Change Log
License (EULA)
▼
Features
Features
Incredible Desktop Wallpaper
Monitor Configuration
Monitor Splitting
Powerful Functions
Triggers
Multi-Monitor Taskbars
Useful Windows 10 Tweaks
Useful Windows 8 Tweaks
Windows Lock Screen
Multi-Monitor Screen Savers
Monitor Fading
Window Snapping
Window Management
Mouse Management
Alt+Tab Handler
Window Position Profiles
Desktop Icon Profiles
Remote Control
Available in dozens of Languages
Easy Administration
Free vs Pro
Purchase
Screenshots
Languages
▼
Help
Help Guide
FAQ
Discussions
Contact Us
Find My License
Mailing Address
Advanced Settings
Scripted Functions (Macros)
Display
Fusion
by Binary Fortress Software
WARNING: You currently have Javascript disabled!
This website will not function correctly without Javascript enabled.
Title
Message
OK
Confirm
Yes
No
Swap Primary Monitors (for 2 monitor setups)
Return to DisplayFusion Scripted Functions (Macros)
Description
This script will make the opposite monitor Primary in 2 monitor setups.
Language
C# (.Net)
Minimum Version
7.2.0+
Created By
MaoYanwen298975
Contributors
-
Date Created
May 13, 2015
Date Last Modified
May 13, 2015
Scripted Function (Macro) Code
Copy
Select All
using System.IO; using System.Runtime.InteropServices; using System.Text; using System; using System.Drawing; using System.Windows.Forms; public static class DisplayFusionFunction { public static void Run(IntPtr windowHandle) { //find a screen that isn't the primary screen Screen unPrimary = null; foreach (Screen screen in Screen.AllScreens) { if (screen.Primary) continue; unPrimary = screen; break; } //if this is null, the computer only has one screen if (unPrimary == null) return; ScreenHelper.SwitchPrimaryScreen(unPrimary, Screen.PrimaryScreen); } } public class WinApi { public const Int32 CCHDEVICENAME = 32; public const Int32 CCHFORMNAME = 32; public enum DEVMODE_SETTINGS { ENUM_CURRENT_SETTINGS = (-1), ENUM_REGISTRY_SETTINGS = (-2) } [Flags()] public enum DisplayDeviceStateFlags : int { AttachedToDesktop = 0x1, MultiDriver = 0x2, PrimaryDevice = 0x4, MirroringDriver = 0x8, VGACompatible = 0x10, Removable = 0x20, ModesPruned = 0x8000000, Remote = 0x4000000, Disconnect = 0x2000000 } public enum Display_Device_Stateflags { DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 0x1, DISPLAY_DEVICE_MIRRORING_DRIVER = 0x8, DISPLAY_DEVICE_MODESPRUNED = 0x8000000, DISPLAY_DEVICE_MULTI_DRIVER = 0x2, DISPLAY_DEVICE_PRIMARY_DEVICE = 0x4, DISPLAY_DEVICE_VGA_COMPATIBLE = 0x10 } public enum DeviceFlags { CDS_FULLSCREEN = 0x4, CDS_GLOBAL = 0x8, CDS_NORESET = 0x10000000, CDS_RESET = 0x40000000, CDS_SET_PRIMARY = 0x10, CDS_TEST = 0x2, CDS_UPDATEREGISTRY = 0x1, CDS_VIDEOPARAMETERS = 0x20, } public enum DEVMODE_Flags { DM_BITSPERPEL = 0x40000, DM_DISPLAYFLAGS = 0x200000, DM_DISPLAYFREQUENCY = 0x400000, DM_PELSHEIGHT = 0x100000, DM_PELSWIDTH = 0x80000, DM_POSITION = 0x20 } public enum DisplaySetting_Results { DISP_CHANGE_BADFLAGS = -4, DISP_CHANGE_BADMODE = -2, DISP_CHANGE_BADPARAM = -5, DISP_CHANGE_FAILED = -1, DISP_CHANGE_NOTUPDATED = -3, DISP_CHANGE_RESTART = 1, DISP_CHANGE_SUCCESSFUL = 0 } [StructLayout(LayoutKind.Sequential)] public struct POINTL { [MarshalAs(UnmanagedType.I4)] public int x; [MarshalAs(UnmanagedType.I4)] public int y; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct DEVMODE { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; [MarshalAs(UnmanagedType.U2)] public UInt16 dmSpecVersion; [MarshalAs(UnmanagedType.U2)] public UInt16 dmDriverVersion; [MarshalAs(UnmanagedType.U2)] public UInt16 dmSize; [MarshalAs(UnmanagedType.U2)] public UInt16 dmDriverExtra; [MarshalAs(UnmanagedType.U4)] public DEVMODE_Flags dmFields; public POINTL dmPosition; [MarshalAs(UnmanagedType.U4)] public UInt32 dmDisplayOrientation; [MarshalAs(UnmanagedType.U4)] public UInt32 dmDisplayFixedOutput; [MarshalAs(UnmanagedType.I2)] public Int16 dmColor; [MarshalAs(UnmanagedType.I2)] public Int16 dmDuplex; [MarshalAs(UnmanagedType.I2)] public Int16 dmYResolution; [MarshalAs(UnmanagedType.I2)] public Int16 dmTTOption; [MarshalAs(UnmanagedType.I2)] public Int16 dmCollate; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName; [MarshalAs(UnmanagedType.U2)] public UInt16 dmLogPixels; [MarshalAs(UnmanagedType.U4)] public UInt32 dmBitsPerPel; [MarshalAs(UnmanagedType.U4)] public UInt32 dmPelsWidth; [MarshalAs(UnmanagedType.U4)] public UInt32 dmPelsHeight; [MarshalAs(UnmanagedType.U4)] public UInt32 dmDisplayFlags; [MarshalAs(UnmanagedType.U4)] public UInt32 dmDisplayFrequency; [MarshalAs(UnmanagedType.U4)] public UInt32 dmICMMethod; [MarshalAs(UnmanagedType.U4)] public UInt32 dmICMIntent; [MarshalAs(UnmanagedType.U4)] public UInt32 dmMediaType; [MarshalAs(UnmanagedType.U4)] public UInt32 dmDitherType; [MarshalAs(UnmanagedType.U4)] public UInt32 dmReserved1; [MarshalAs(UnmanagedType.U4)] public UInt32 dmReserved2; [MarshalAs(UnmanagedType.U4)] public UInt32 dmPanningWidth; [MarshalAs(UnmanagedType.U4)] public UInt32 dmPanningHeight; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct DISPLAY_DEVICE { [MarshalAs(UnmanagedType.U4)] public int cb; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string DeviceName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceString; [MarshalAs(UnmanagedType.U4)] public DisplayDeviceStateFlags StateFlags; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceID; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceKey; } public class User_32 { [DllImport("user32.dll")] public static extern int ChangeDisplaySettingsEx(string lpszDeviceName, [In] ref DEVMODE lpDevMode, IntPtr hwnd, int dwFlags, IntPtr lParam); } } public class ScreenHelper { public static void SwitchPrimaryScreen(Screen newPrimary, Screen oldPrimary) { MoveOldPrimary(newPrimary, oldPrimary); MoveNewPrimary(newPrimary, oldPrimary); CommitChange(newPrimary, oldPrimary); } private static void MoveOldPrimary(Screen newPrimary, Screen oldPrimary) { WinApi.DEVMODE ndm3 = NewDevMode(); ndm3.dmFields = WinApi.DEVMODE_Flags.DM_POSITION; ndm3.dmPosition.x = newPrimary.Bounds.Width; ndm3.dmPosition.y = 0; WinApi.User_32.ChangeDisplaySettingsEx(oldPrimary.DeviceName, ref ndm3, (IntPtr)null, (int)WinApi.DeviceFlags.CDS_UPDATEREGISTRY | (int)WinApi.DeviceFlags.CDS_NORESET, IntPtr.Zero); } private static void MoveNewPrimary(Screen newPrimary, Screen oldPrimary) { WinApi.DEVMODE ndm4 = NewDevMode(); ndm4.dmFields = WinApi.DEVMODE_Flags.DM_POSITION; ndm4.dmPosition.x = 0; ndm4.dmPosition.y = 0; WinApi.User_32.ChangeDisplaySettingsEx(newPrimary.DeviceName, ref ndm4, (IntPtr)null, (int)WinApi.DeviceFlags.CDS_SET_PRIMARY | (int)WinApi.DeviceFlags.CDS_UPDATEREGISTRY | (int)WinApi.DeviceFlags.CDS_NORESET, IntPtr.Zero); } private static void CommitChange(Screen newPrimary, Screen oldPrimary) { WinApi.DEVMODE ndm5 = NewDevMode(); WinApi.User_32.ChangeDisplaySettingsEx(oldPrimary.DeviceName, ref ndm5, (IntPtr)null, (int)WinApi.DeviceFlags.CDS_UPDATEREGISTRY, (IntPtr)null); WinApi.DEVMODE ndm6 = NewDevMode(); WinApi.User_32.ChangeDisplaySettingsEx(newPrimary.DeviceName, ref ndm6, (IntPtr)null, (int)WinApi.DeviceFlags.CDS_SET_PRIMARY | (int)WinApi.DeviceFlags.CDS_UPDATEREGISTRY, IntPtr.Zero); } private static WinApi.DEVMODE NewDevMode() { WinApi.DEVMODE dm = new WinApi.DEVMODE(); dm.dmDeviceName = new String(new char[31]); dm.dmFormName = new String(new char[31]); dm.dmSize = (ushort)Marshal.SizeOf(dm); return dm; } }
Copyright © 2007-2021 Binary Fortress Software
•
News
•
Discussions
•
FAQ
•
Support
•
Privacy
•
ToS
•
Get DisplayFusion Merch