home
products
contribute
download
documentation
forum
Home
Forums
New posts
Search forums
What's new
New posts
All posts
Latest activity
Members
Registered members
Current visitors
Donate
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Search titles only
By:
Menu
Log in
Register
Navigation
Install the app
Install
More options
Contact us
Close Menu
Forums
MediaPortal 1
MediaPortal 1 Talk
Automatic Refreshrate Changer
Contact us
RSS
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
<blockquote data-quote="dannyb0y" data-source="post: 344557" data-attributes="member: 18668"><p><strong>Why thirdparty software?</strong></p><p></p><p>I have written some code that uses windows API to change refresh rate.</p><p>in my thread <a href="https://forum.team-mediaportal.com/plugins-47/very-simple-refreshrate-changer-39790/" target="_blank">https://forum.team-mediaportal.com/plugins-47/very-simple-refreshrate-changer-39790/</a> you can get the source code.</p><p>My suggestion is to build a plugin that does not use any thirdparty products to change refresh rate.</p><p></p><p>here is the c# class:</p><p></p><p>using System;</p><p>using System.Runtime.InteropServices;</p><p></p><p></p><p>//http://groups.google.se/group/microsoft.public.dotnet.framework.drawing/browse_thread/thread/2898363a6bc22f30/22e9e76998ccf819?hl=sv&lnk=st&q=refresh+rate+win32+api+c%23#22e9e76998ccf819</p><p></p><p>namespace Monitor</p><p>{</p><p> public sealed class Win32</p><p> {</p><p></p><p> public const int CCHDEVICENAME = 32;</p><p> public const int CCHFORMNAME = 32;</p><p></p><p> [Flags]</p><p> public enum DISPLAY_DEVICE_StateFlags : uint</p><p> {</p><p> None = 0x00000000,</p><p> DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 0x00000001,</p><p> DISPLAY_DEVICE_MULTI_DRIVER = 0x00000002,</p><p> DISPLAY_DEVICE_PRIMARY_DEVICE = 0x00000004,</p><p> DISPLAY_DEVICE_MIRRORING_DRIVER = 0x00000008,</p><p> DISPLAY_DEVICE_VGA_COMPATIBLE = 0x00000010,</p><p> DISPLAY_DEVICE_REMOVABLE = 0x00000020,</p><p> DISPLAY_DEVICE_MODESPRUNED = 0x08000000,</p><p> DISPLAY_DEVICE_REMOTE = 0x04000000,</p><p> DISPLAY_DEVICE_DISCONNECT = 0x02000000</p><p> }</p><p></p><p> [Flags]</p><p> public enum DEVMODE_Fields : uint</p><p> {</p><p> None = 0x00000000,</p><p> DM_POSITION = 0x00000020,</p><p> DM_BITSPERPEL = 0x00040000,</p><p> DM_PELSWIDTH = 0x00080000,</p><p> DM_PELSHEIGHT = 0x00100000,</p><p> DM_DISPLAYFLAGS = 0x00200000,</p><p> DM_DISPLAYFREQUENCY = 0x00400000</p><p> }</p><p></p><p></p><p> [Flags]</p><p> public enum ChangeDisplaySettings_Flags : uint</p><p> {</p><p> None = 0x00000000,</p><p> CDS_UPDATEREGISTRY = 0x00000001,</p><p> CDS_TEST = 0x00000002,</p><p> CDS_FULLSCREEN = 0x00000004,</p><p> CDS_GLOBAL = 0x00000008,</p><p> CDS_SET_PRIMARY = 0x00000010,</p><p> CDS_VIDEOPARAMETERS = 0x00000020,</p><p> CDS_RESET = 0x40000000,</p><p> CDS_NORESET = 0x10000000</p><p> }</p><p></p><p></p><p> public enum ChangeDisplaySettings_Result : int</p><p> {</p><p> DISP_CHANGE_SUCCESSFUL = 0,</p><p> DISP_CHANGE_RESTART = 1,</p><p> DISP_CHANGE_FAILED = -1,</p><p> DISP_CHANGE_BADMODE = -2,</p><p> DISP_CHANGE_NOTUPDATED = -3,</p><p> DISP_CHANGE_BADFLAGS = -4,</p><p> DISP_CHANGE_BADPARAM = -5,</p><p> DISP_CHANGE_BADDUALVIEW = -6</p><p> }</p><p></p><p></p><p> public enum EnumDisplaySettings_EnumMode : uint</p><p> {</p><p> ENUM_CURRENT_SETTINGS = uint.MaxValue,</p><p> ENUM_REGISTRY_SETTINGS = uint.MaxValue - 1</p><p> }</p><p></p><p></p><p> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]</p><p> public class DISPLAY_DEVICE</p><p> {</p><p> public uint cb = (uint)Marshal.SizeOf(typeof(DISPLAY_DEVICE));</p><p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]</p><p> public string DeviceName = "";</p><p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]</p><p> public string DeviceString = "";</p><p> public DISPLAY_DEVICE_StateFlags StateFlags = 0;</p><p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]</p><p> public string DeviceID = "";</p><p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]</p><p> public string DeviceKey = "";</p><p> }</p><p></p><p></p><p> [StructLayout(LayoutKind.Sequential)]</p><p> public struct POINTL</p><p> {</p><p> public POINTL(int x, int y)</p><p> {</p><p> this.x = x;</p><p> this.y = y;</p><p> }</p><p> public int x;</p><p> public int y;</p><p> }</p><p></p><p></p><p> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]</p><p> public class DEVMODE_Display</p><p> {</p><p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]</p><p> public string dmDeviceName = null;</p><p> public ushort dmSpecVersion = 0;</p><p> public ushort dmDriverVersion = 0;</p><p> public ushort dmSize = (ushort)Marshal.SizeOf(typeof(DEVMODE_Display));</p><p> public ushort dmDriverExtra = 0;</p><p> public DEVMODE_Fields dmFields = DEVMODE_Fields.None;</p><p> public POINTL dmPosition = new POINTL();</p><p> public uint dmDisplayOrientation = 0;</p><p> public uint dmDisplayFixedOutput = 0;</p><p> public short dmColor = 0;</p><p> public short dmDuplex = 0;</p><p> public short dmYResolution = 0;</p><p> public short dmTTOption = 0;</p><p> public short dmCollate = 0;</p><p> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]</p><p> public string dmFormName = null;</p><p> public ushort dmLogPixels = 0;</p><p> public uint dmBitsPerPel = 0;</p><p> public uint dmPelsWidth = 0;</p><p> public uint dmPelsHeight = 0;</p><p> public uint dmDisplayFlags = 0;</p><p> public uint dmDisplayFrequency = 0;</p><p> public uint dmICMMethod = 0;</p><p> public uint dmICMIntent = 0;</p><p> public uint dmMediaType = 0;</p><p> public uint dmDitherType = 0;</p><p> public uint dmReserved1 = 0;</p><p> public uint dmReserved2 = 0;</p><p> public uint dmPanningWidth = 0;</p><p> public uint dmPanningHeight = 0;</p><p> }</p><p></p><p></p><p> [DllImport("user32.dll", CharSet = CharSet.Unicode)]</p><p> public extern static int EnumDisplayDevices([In] string lpDevice, [In] </p><p> uint iDevNum, [In][Out] DISPLAY_DEVICE lpDisplayDevice, [In] uint dwFlags);</p><p></p><p></p><p> [DllImport("user32.dll", CharSet = CharSet.Unicode)]</p><p> public extern static int EnumDisplaySettingsEx([In] string lpszDeviceName,</p><p> [In] EnumDisplaySettings_EnumMode iModeNum, [In][Out] DEVMODE_Display</p><p> lpDevMode, [In] uint dwFlags);</p><p></p><p></p><p> [DllImport("user32.dll", CharSet = CharSet.Unicode)]</p><p> public extern static ChangeDisplaySettings_Result</p><p> ChangeDisplaySettingsEx([In] string lpszDeviceName, [In] DEVMODE_Display</p><p> lpDevMode, [In] IntPtr hwnd, [In] ChangeDisplaySettings_Flags dwFlags, [In] </p><p> IntPtr lParam);</p><p></p><p></p><p> public static void CycleRefreshRate(uint monitorIndex, uint refreshRate)</p><p> {</p><p></p><p> Monitor.Win32.DISPLAY_DEVICE displayDevice = new Monitor.Win32.DISPLAY_DEVICE();</p><p> int result = Monitor.Win32.EnumDisplayDevices(null, monitorIndex, displayDevice, 0);</p><p></p><p> if (result != 0)</p><p> {</p><p> Monitor.Win32.DEVMODE_Display devMode = new Monitor.Win32.DEVMODE_Display();</p><p></p><p> devMode.dmFields = Monitor.Win32.DEVMODE_Fields.DM_DISPLAYFREQUENCY;</p><p></p><p> devMode.dmDisplayFrequency = refreshRate;</p><p> Monitor.Win32.ChangeDisplaySettings_Result r = Monitor.Win32.ChangeDisplaySettingsEx(displayDevice.DeviceName, devMode,</p><p> IntPtr.Zero, Monitor.Win32.ChangeDisplaySettings_Flags.None, IntPtr.Zero);</p><p> }</p><p> }</p><p></p><p> }</p><p></p><p></p><p></p><p></p><p></p><p>}</p></blockquote><p></p>
[QUOTE="dannyb0y, post: 344557, member: 18668"] [b]Why thirdparty software?[/b] I have written some code that uses windows API to change refresh rate. in my thread [url]https://forum.team-mediaportal.com/plugins-47/very-simple-refreshrate-changer-39790/[/url] you can get the source code. My suggestion is to build a plugin that does not use any thirdparty products to change refresh rate. here is the c# class: using System; using System.Runtime.InteropServices; //http://groups.google.se/group/microsoft.public.dotnet.framework.drawing/browse_thread/thread/2898363a6bc22f30/22e9e76998ccf819?hl=sv&lnk=st&q=refresh+rate+win32+api+c%23#22e9e76998ccf819 namespace Monitor { public sealed class Win32 { public const int CCHDEVICENAME = 32; public const int CCHFORMNAME = 32; [Flags] public enum DISPLAY_DEVICE_StateFlags : uint { None = 0x00000000, DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 0x00000001, DISPLAY_DEVICE_MULTI_DRIVER = 0x00000002, DISPLAY_DEVICE_PRIMARY_DEVICE = 0x00000004, DISPLAY_DEVICE_MIRRORING_DRIVER = 0x00000008, DISPLAY_DEVICE_VGA_COMPATIBLE = 0x00000010, DISPLAY_DEVICE_REMOVABLE = 0x00000020, DISPLAY_DEVICE_MODESPRUNED = 0x08000000, DISPLAY_DEVICE_REMOTE = 0x04000000, DISPLAY_DEVICE_DISCONNECT = 0x02000000 } [Flags] public enum DEVMODE_Fields : uint { None = 0x00000000, DM_POSITION = 0x00000020, DM_BITSPERPEL = 0x00040000, DM_PELSWIDTH = 0x00080000, DM_PELSHEIGHT = 0x00100000, DM_DISPLAYFLAGS = 0x00200000, DM_DISPLAYFREQUENCY = 0x00400000 } [Flags] public enum ChangeDisplaySettings_Flags : uint { None = 0x00000000, CDS_UPDATEREGISTRY = 0x00000001, CDS_TEST = 0x00000002, CDS_FULLSCREEN = 0x00000004, CDS_GLOBAL = 0x00000008, CDS_SET_PRIMARY = 0x00000010, CDS_VIDEOPARAMETERS = 0x00000020, CDS_RESET = 0x40000000, CDS_NORESET = 0x10000000 } public enum ChangeDisplaySettings_Result : int { DISP_CHANGE_SUCCESSFUL = 0, DISP_CHANGE_RESTART = 1, DISP_CHANGE_FAILED = -1, DISP_CHANGE_BADMODE = -2, DISP_CHANGE_NOTUPDATED = -3, DISP_CHANGE_BADFLAGS = -4, DISP_CHANGE_BADPARAM = -5, DISP_CHANGE_BADDUALVIEW = -6 } public enum EnumDisplaySettings_EnumMode : uint { ENUM_CURRENT_SETTINGS = uint.MaxValue, ENUM_REGISTRY_SETTINGS = uint.MaxValue - 1 } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public class DISPLAY_DEVICE { public uint cb = (uint)Marshal.SizeOf(typeof(DISPLAY_DEVICE)); [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string DeviceName = ""; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceString = ""; public DISPLAY_DEVICE_StateFlags StateFlags = 0; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceID = ""; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string DeviceKey = ""; } [StructLayout(LayoutKind.Sequential)] public struct POINTL { public POINTL(int x, int y) { this.x = x; this.y = y; } public int x; public int y; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public class DEVMODE_Display { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)] public string dmDeviceName = null; public ushort dmSpecVersion = 0; public ushort dmDriverVersion = 0; public ushort dmSize = (ushort)Marshal.SizeOf(typeof(DEVMODE_Display)); public ushort dmDriverExtra = 0; public DEVMODE_Fields dmFields = DEVMODE_Fields.None; public POINTL dmPosition = new POINTL(); public uint dmDisplayOrientation = 0; public uint dmDisplayFixedOutput = 0; public short dmColor = 0; public short dmDuplex = 0; public short dmYResolution = 0; public short dmTTOption = 0; public short dmCollate = 0; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)] public string dmFormName = null; public ushort dmLogPixels = 0; public uint dmBitsPerPel = 0; public uint dmPelsWidth = 0; public uint dmPelsHeight = 0; public uint dmDisplayFlags = 0; public uint dmDisplayFrequency = 0; public uint dmICMMethod = 0; public uint dmICMIntent = 0; public uint dmMediaType = 0; public uint dmDitherType = 0; public uint dmReserved1 = 0; public uint dmReserved2 = 0; public uint dmPanningWidth = 0; public uint dmPanningHeight = 0; } [DllImport("user32.dll", CharSet = CharSet.Unicode)] public extern static int EnumDisplayDevices([In] string lpDevice, [In] uint iDevNum, [In][Out] DISPLAY_DEVICE lpDisplayDevice, [In] uint dwFlags); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public extern static int EnumDisplaySettingsEx([In] string lpszDeviceName, [In] EnumDisplaySettings_EnumMode iModeNum, [In][Out] DEVMODE_Display lpDevMode, [In] uint dwFlags); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public extern static ChangeDisplaySettings_Result ChangeDisplaySettingsEx([In] string lpszDeviceName, [In] DEVMODE_Display lpDevMode, [In] IntPtr hwnd, [In] ChangeDisplaySettings_Flags dwFlags, [In] IntPtr lParam); public static void CycleRefreshRate(uint monitorIndex, uint refreshRate) { Monitor.Win32.DISPLAY_DEVICE displayDevice = new Monitor.Win32.DISPLAY_DEVICE(); int result = Monitor.Win32.EnumDisplayDevices(null, monitorIndex, displayDevice, 0); if (result != 0) { Monitor.Win32.DEVMODE_Display devMode = new Monitor.Win32.DEVMODE_Display(); devMode.dmFields = Monitor.Win32.DEVMODE_Fields.DM_DISPLAYFREQUENCY; devMode.dmDisplayFrequency = refreshRate; Monitor.Win32.ChangeDisplaySettings_Result r = Monitor.Win32.ChangeDisplaySettingsEx(displayDevice.DeviceName, devMode, IntPtr.Zero, Monitor.Win32.ChangeDisplaySettings_Flags.None, IntPtr.Zero); } } } } [/QUOTE]
Insert quotes…
Verification
Post reply
Forums
MediaPortal 1
MediaPortal 1 Talk
Automatic Refreshrate Changer
Contact us
RSS
Top
Bottom