diff --git a/PInvoke/User32/WinUser.System.cs b/PInvoke/User32/WinUser.System.cs
index 21620b05..668cf303 100644
--- a/PInvoke/User32/WinUser.System.cs
+++ b/PInvoke/User32/WinUser.System.cs
@@ -4,6 +4,7 @@ using System.Runtime.InteropServices;
using System.Text;
using Vanara.Extensions;
using Vanara.InteropServices;
+using static Vanara.PInvoke.User32.SPCorrespondingTypeAttribute.SetParameterMethod;
namespace Vanara.PInvoke
{
@@ -678,39 +679,39 @@ namespace Vanara.PInvoke
/// Determines whether the warning beeper is on. The pvParam parameter must point to a BOOL variable that receives TRUE if the
/// beeper is on, or FALSE if it is off.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Get)]
SPI_GETBEEP = 0x0001,
/// Turns the warning beeper on or off. The uiParam parameter specifies TRUE for on, or FALSE for off.
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETBEEP = 0x0002,
///
/// Retrieves the two mouse threshold values and the mouse acceleration. The pvParam parameter must point to an array of three
/// integers that receives these values. See mouse_event for further information.
///
- [SPCorrespondingType(typeof(int[]), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(int[]), CorrespondingAction.Get)]
SPI_GETMOUSE = 0x0003,
///
/// Sets the two mouse threshold values and the mouse acceleration. The pvParam parameter must point to an array of three
/// integers that specifies these values. See mouse_event for further information.
///
- [SPCorrespondingType(typeof(int[]), CorrespondingAction.Set, false)]
+ [SPCorrespondingType(typeof(int[]), CorrespondingAction.Set)]
SPI_SETMOUSE = 0x0004,
///
/// Retrieves the border multiplier factor that determines the width of a window's sizing border. The pvParam parameter must
/// point to an integer variable that receives this value.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Get)]
SPI_GETBORDER = 0x0005,
///
/// Sets the border multiplier factor that determines the width of a window's sizing border. The uiParam parameter specifies the
/// new value.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETBORDER = 0x0006,
///
@@ -718,7 +719,7 @@ namespace Vanara.PInvoke
/// through 31 (approximately 30 repetitions per second). The actual repeat rates are hardware-dependent and may vary from a
/// linear scale by as much as 20%. The pvParam parameter must point to a DWORD variable that receives the setting
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Get)]
SPI_GETKEYBOARDSPEED = 0x000A,
///
@@ -726,7 +727,7 @@ namespace Vanara.PInvoke
/// repetitions per second) through 31 (approximately 30 repetitions per second). The actual repeat rates are hardware-dependent
/// and may vary from a linear scale by as much as 20%. If uiParam is greater than 31, the parameter is set to 31.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETKEYBOARDSPEED = 0x000B,
/// Not implemented.
@@ -737,45 +738,45 @@ namespace Vanara.PInvoke
/// To set this value, set uiParam to the new value and set pvParam to null. You cannot set this value to less than SM_CXICON. To
/// retrieve this value, pvParam must point to an integer that receives the current value.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.GetSet, UiParam)]
SPI_ICONHORIZONTALSPACING = 0x000D,
///
/// Retrieves the screen saver time-out value, in seconds. The pvParam parameter must point to an integer variable that receives
/// the value.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Get)]
SPI_GETSCREENSAVETIMEOUT = 0x000E,
///
/// Sets the screen saver time-out value to the value of the uiParam parameter. This value is the amount of time, in seconds,
/// that the system must be idle before the screen saver activates.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETSCREENSAVETIMEOUT = 0x000F,
///
/// Determines whether screen saving is enabled. The pvParam parameter must point to a bool variable that receives TRUE if screen
/// saving is enabled, or FALSE otherwise.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Get)]
SPI_GETSCREENSAVEACTIVE = 0x0010,
///
/// Sets the state of the screen saver. The uiParam parameter specifies TRUE to activate screen saving, or FALSE to deactivate it.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETSCREENSAVEACTIVE = 0x0011,
///
/// Retrieves the current granularity value of the desktop sizing grid. The pvParam parameter must point to an integer variable
/// that receives the granularity.
///
- [Obsolete, SPCorrespondingType(typeof(int), CorrespondingAction.Get, true)]
+ [Obsolete, SPCorrespondingType(typeof(int), CorrespondingAction.Get)]
SPI_GETGRIDGRANULARITY = 0x0012,
/// Sets the granularity of the desktop sizing grid to the value of the uiParam parameter.
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETGRIDGRANULARITY = 0x0013,
///
@@ -783,11 +784,11 @@ namespace Vanara.PInvoke
/// set pvParam to point to a null-terminated string containing the name of a bitmap file. Setting pvParam to "" removes the
/// wallpaper. Setting pvParam to SETWALLPAPER_DEFAULT or null reverts to the default wallpaper.
///
- [SPCorrespondingType(typeof(string), CorrespondingAction.Set, false, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(string), CorrespondingAction.Set, Direct)] // TODO: Check if this is correct
SPI_SETDESKWALLPAPER = 0x0014,
/// Sets the current desktop pattern by causing Windows to read the Pattern= setting from the WIN.INI file.
- [SPCorrespondingType(typeof(string), CorrespondingAction.Set, false)]
+ [SPCorrespondingType(typeof(string), CorrespondingAction.Set, UiParam)]
SPI_SETDESKPATTERN = 0x0015,
///
@@ -795,7 +796,7 @@ namespace Vanara.PInvoke
/// (approximately 1 second delay). The actual delay associated with each value may vary depending on the hardware. The pvParam
/// parameter must point to an integer variable that receives the setting.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Get, false)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Get)]
SPI_GETKEYBOARDDELAY = 0x0016,
///
@@ -804,7 +805,7 @@ namespace Vanara.PInvoke
/// ms) and 3 sets the longest delay (approximately 1 second). The actual delay associated with each value may vary depending on
/// the hardware.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETKEYBOARDDELAY = 0x0017,
///
@@ -812,7 +813,7 @@ namespace Vanara.PInvoke
/// null. You cannot set this value to less than SM_CYICON. To retrieve this value, pvParam must point to an integer that
/// receives the current value.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.GetSet, UiParam)]
SPI_ICONVERTICALSPACING = 0x0018,
///
@@ -823,7 +824,7 @@ namespace Vanara.PInvoke
SPI_GETICONTITLEWRAP = 0x0019,
/// Turns icon-title wrapping on or off. The uiParam parameter specifies TRUE for on, or FALSE for off.
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETICONTITLEWRAP = 0x001A,
///
@@ -836,7 +837,7 @@ namespace Vanara.PInvoke
///
/// Sets the alignment value of pop-up menus. The uiParam parameter specifies TRUE for right alignment, or FALSE for left alignment.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETMENUDROPALIGNMENT = 0x001C,
///
@@ -844,7 +845,7 @@ namespace Vanara.PInvoke
/// rectangle within which the second click of a double-click must fall for it to be registered as a double-click. To retrieve
/// the width of the double-click rectangle, call GetSystemMetrics with the SM_CXDOUBLECLK flag.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETDOUBLECLKWIDTH = 0x001D,
///
@@ -852,7 +853,7 @@ namespace Vanara.PInvoke
/// rectangle within which the second click of a double-click must fall for it to be registered as a double-click. To retrieve
/// the height of the double-click rectangle, call GetSystemMetrics with the SM_CYDOUBLECLK flag.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETDOUBLECLKHEIGHT = 0x001E,
///
@@ -867,21 +868,21 @@ namespace Vanara.PInvoke
/// of milliseconds that can occur between the first and second clicks of a double-click. You can also call the
/// SetDoubleClickTime function to set the double-click time. To get the current double-click time, call the GetDoubleClickTime function.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETDOUBLECLICKTIME = 0x0020,
///
/// Swaps or restores the meaning of the left and right mouse buttons. The uiParam parameter specifies TRUE to swap the meanings
/// of the buttons, or FALSE to restore their original meanings.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETMOUSEBUTTONSWAP = 0x0021,
///
/// Sets the font that is used for icon titles. The uiParam parameter specifies the size of a LOGFONT structure, and the pvParam
/// parameter must point to a LOGFONT structure.
///
- [SPCorrespondingType(typeof(LOGFONT), CorrespondingAction.Set, false)]
+ [SPCorrespondingType(typeof(LOGFONT), CorrespondingAction.Set)]
SPI_SETICONTITLELOGFONT = 0x0022,
///
@@ -902,7 +903,7 @@ namespace Vanara.PInvoke
/// Sets dragging of full windows either on or off. The uiParam parameter specifies TRUE for on, or FALSE for off. Windows 95:
/// This flag is supported only if Windows Plus! is installed. See SPI_GETWINDOWSEXTENSION.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETDRAGFULLWINDOWS = 0x0025,
///
@@ -978,7 +979,7 @@ namespace Vanara.PInvoke
/// Windows Me/98/95: Pen windows is being loaded or unloaded. The uiParam parameter is TRUE when loading and FALSE when
/// unloading pen windows. The pvParam parameter is null.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETPENWINDOWS = 0x0031,
///
@@ -1018,7 +1019,7 @@ namespace Vanara.PInvoke
/// and wants applications to display keyboard interfaces that would otherwise be hidden; uiParam is FALSE otherwise. Windows NT:
/// This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETKEYBOARDPREF = 0x0045,
///
@@ -1034,7 +1035,7 @@ namespace Vanara.PInvoke
/// Determines whether a screen review utility is running. The uiParam parameter specifies TRUE for on, or FALSE for off. Windows
/// NT: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETSCREENREADER = 0x0047,
///
@@ -1064,25 +1065,25 @@ namespace Vanara.PInvoke
/// pixels at different gray levels. To enable the feature, set the uiParam parameter to TRUE. To disable the feature, set
/// uiParam to FALSE. Windows 95: This flag is supported only if Windows Plus! is installed. See SPI_GETWINDOWSEXTENSION.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETFONTSMOOTHING = 0x004B,
///
/// Sets the width, in pixels, of the rectangle used to detect the start of a drag operation. Set uiParam to the new value. To
/// retrieve the drag width, call GetSystemMetrics with the SM_CXDRAG flag.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETDRAGWIDTH = 0x004C,
///
/// Sets the height, in pixels, of the rectangle used to detect the start of a drag operation. Set uiParam to the new value. To
/// retrieve the drag height, call GetSystemMetrics with the SM_CYDRAG flag.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETDRAGHEIGHT = 0x004D,
/// Used internally; applications should not use this value.
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETHANDHELD = 0x004E,
///
@@ -1106,7 +1107,7 @@ namespace Vanara.PInvoke
/// The pvParam parameter must be null. This flag is supported for 32-bit applications only. Windows NT, Windows Me/98: This flag
/// is supported for 16-bit and 32-bit applications. Windows 95: This flag is supported for 16-bit applications only.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETLOWPOWERTIMEOUT = 0x0051,
///
@@ -1114,7 +1115,7 @@ namespace Vanara.PInvoke
/// The pvParam parameter must be null. This flag is supported for 32-bit applications only. Windows NT, Windows Me/98: This flag
/// is supported for 16-bit and 32-bit applications. Windows 95: This flag is supported for 16-bit applications only.
///
- [SPCorrespondingType(typeof(int), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(int), CorrespondingAction.Set, UiParam)]
SPI_SETPOWEROFFTIMEOUT = 0x0052,
///
@@ -1138,7 +1139,7 @@ namespace Vanara.PInvoke
/// pvParam parameter must be null. This flag is supported for 32-bit applications only. Windows NT, Windows Me/98: This flag is
/// supported for 16-bit and 32-bit applications. Windows 95: This flag is supported for 16-bit applications only.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETLOWPOWERACTIVE = 0x0055,
///
@@ -1146,15 +1147,15 @@ namespace Vanara.PInvoke
/// pvParam parameter must be null. This flag is supported for 32-bit applications only. Windows NT, Windows Me/98: This flag is
/// supported for 16-bit and 32-bit applications. Windows 95: This flag is supported for 16-bit applications only.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETPOWEROFFACTIVE = 0x0056,
/// Reloads the system cursors. Set the uiParam parameter to zero and the pvParam parameter to null.
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETCURSORS = 0x0057,
/// Reloads the system icons. Set the uiParam parameter to zero and the pvParam parameter to null.
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETICONS = 0x0058,
///
@@ -1194,7 +1195,7 @@ namespace Vanara.PInvoke
/// feature, set uiParam to a value greater than 1 to indicate the number of cursors drawn in the trail. Windows 2000/NT: This
/// value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETMOUSETRAILS = 0x005D,
///
@@ -1208,11 +1209,11 @@ namespace Vanara.PInvoke
SPI_GETMOUSETRAILS = 0x005E,
/// Windows Me/98: Used internally; applications should not use this flag.
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETSCREENSAVERRUNNING = 0x0061,
/// Same as SPI_SETSCREENSAVERRUNNING.
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SCREENSAVERRUNNING = SPI_SETSCREENSAVERRUNNING,
///
@@ -1349,7 +1350,7 @@ namespace Vanara.PInvoke
/// it. Applications should use the ShowWindow function when displaying a dialog box so the dialog manager can position the mouse
/// cursor. Windows 95: Not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETSNAPTODEFBUTTON = 0x0060,
///
@@ -1377,7 +1378,7 @@ namespace Vanara.PInvoke
/// Sets the height, in pixels, of the rectangle within which the mouse pointer has to stay for TrackMouseEvent to generate a
/// WM_MOUSEHOVER message. Set the uiParam parameter to the new height. Windows 95: Not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETMOUSEHOVERHEIGHT = 0x0065,
///
@@ -1392,7 +1393,7 @@ namespace Vanara.PInvoke
/// WM_MOUSEHOVER message. This is used only if you pass HOVER_DEFAULT in the dwHoverTime parameter in the call to
/// TrackMouseEvent. Set the uiParam parameter to the new time. Windows 95: Not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETMOUSEHOVERTIME = 0x0067,
///
@@ -1409,7 +1410,7 @@ namespace Vanara.PInvoke
/// viewable, and in particular if it is WHEEL_PAGESCROLL (#defined as UINT_MAX), the scroll operation should be interpreted as
/// clicking once in the page down or page up regions of the scroll bar. Windows 95: Not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETWHEELSCROLLLINES = 0x0069,
///
@@ -1423,7 +1424,7 @@ namespace Vanara.PInvoke
/// Sets uiParam to the time, in milliseconds, that the system waits before displaying a shortcut menu when the mouse cursor is
/// over a submenu item. Windows 95: Not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETMENUSHOWDELAY = 0x006B,
///
@@ -1437,7 +1438,7 @@ namespace Vanara.PInvoke
/// Sets whether the IME status window is visible or not on a per-user basis. The uiParam parameter specifies TRUE for on or
/// FALSE for off. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETSHOWIMEUI = 0x006F,
///
@@ -1453,7 +1454,7 @@ namespace Vanara.PInvoke
/// Sets the current mouse speed. The pvParam parameter is an integer between 1 (slowest) and 20 (fastest). A value of 10 is the
/// default. This value is typically set using the mouse control panel application. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETMOUSESPEED = 0x0071,
///
@@ -1513,7 +1514,7 @@ namespace Vanara.PInvoke
/// If the machine has entered power saving mode or system lock state, an ERROR_OPERATION_IN_PROGRESS exception occurs.
/// Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETSCREENSAVESECURE = 0x0077,
///
@@ -1529,7 +1530,7 @@ namespace Vanara.PInvoke
/// thread can go without dispatching a message before the system considers it unresponsive.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [Obsolete, SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [Obsolete, SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETHUNGAPPTIMEOUT = 0x0079,
///
@@ -1545,7 +1546,7 @@ namespace Vanara.PInvoke
/// milliseconds that the system waits before terminating an application that does not respond to a shutdown request.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [Obsolete, SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [Obsolete, SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETWAITTOKILLTIMEOUT = 0x007B,
///
@@ -1561,7 +1562,7 @@ namespace Vanara.PInvoke
/// that the system waits before terminating a service that does not respond to a shutdown request.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [Obsolete, SPCorrespondingType(typeof(uint), CorrespondingAction.Set, true)]
+ [Obsolete, SPCorrespondingType(typeof(uint), CorrespondingAction.Set, UiParam)]
SPI_SETWAITTOKILLSERVICETIMEOUT = 0x007D,
///
@@ -1674,7 +1675,7 @@ namespace Vanara.PInvoke
///
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETWINARRANGING = 0x0083,
///
@@ -1765,7 +1766,7 @@ namespace Vanara.PInvoke
/// SPI_GETWINARRANGING must be TRUE to enable this behavior.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETDRAGFROMMAXIMIZE = 0x008D,
///
@@ -1783,7 +1784,7 @@ namespace Vanara.PInvoke
/// SPI_GETWINARRANGING must be TRUE to enable this behavior.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETSNAPSIZING = 0x008F,
///
@@ -1801,7 +1802,7 @@ namespace Vanara.PInvoke
/// SPI_GETWINARRANGING must be TRUE to enable this behavior.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETDOCKMOVING = 0x0091,
/// Undocumented
@@ -1852,7 +1853,7 @@ namespace Vanara.PInvoke
/// Sets active window tracking (activating the window the mouse is on) either on or off. Set pvParam to TRUE for on or FALSE for
/// off. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETACTIVEWINDOWTRACKING = 0x1001,
///
@@ -1869,7 +1870,7 @@ namespace Vanara.PInvoke
/// BOOL variable; set pvParam to TRUE to enable animation and FALSE to disable animation. If animation is enabled,
/// SPI_GETMENUFADE indicates whether menus use fade or slide animation. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETMENUANIMATION = 0x1003,
///
@@ -1883,7 +1884,7 @@ namespace Vanara.PInvoke
/// Enables or disables the slide-open effect for combo boxes. Set the pvParam parameter to TRUE to enable the gradient effect,
/// or FALSE to disable it. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETCOMBOBOXANIMATION = 0x1005,
///
@@ -1897,7 +1898,7 @@ namespace Vanara.PInvoke
/// Enables or disables the smooth-scrolling effect for list boxes. Set the pvParam parameter to TRUE to enable the
/// smooth-scrolling effect, or FALSE to disable it. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETLISTBOXSMOOTHSCROLLING = 0x1007,
///
@@ -1913,7 +1914,7 @@ namespace Vanara.PInvoke
/// disable it. The gradient effect is possible only if the system has a color depth of more than 256 colors. For more
/// information about the gradient effect, see the GetSysColor function. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETGRADIENTCAPTIONS = 0x1009,
///
@@ -1929,7 +1930,7 @@ namespace Vanara.PInvoke
/// underline menu access keys, or FALSE to underline menu access keys only when the menu is activated from the keyboard. Windows
/// NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETKEYBOARDCUES = 0x100B,
/// Same as SPI_GETKEYBOARDCUES.
@@ -1951,7 +1952,7 @@ namespace Vanara.PInvoke
/// Determines whether or not windows activated through active window tracking should be brought to the top. Set pvParam to TRUE
/// for on or FALSE for off. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETACTIVEWNDTRKZORDER = 0x100D,
///
@@ -1968,7 +1969,7 @@ namespace Vanara.PInvoke
/// TRUE to enable it, or FALSE to disable it. Hot-tracking means that when the cursor moves over an item, it is highlighted but
/// not selected. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETHOTTRACKING = 0x100F,
///
@@ -1986,7 +1987,7 @@ namespace Vanara.PInvoke
/// more than 256 colors. This flag is ignored unless SPI_MENUANIMATION is also set. For more information, see AnimateWindow.
/// Windows NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETMENUFADE = 0x1013,
///
@@ -2003,7 +2004,7 @@ namespace Vanara.PInvoke
/// effect is possible only if the system has a color depth of more than 256 colors. Windows NT, Windows Me/98/95: This value is
/// not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETSELECTIONFADE = 0x1015,
///
@@ -2018,7 +2019,7 @@ namespace Vanara.PInvoke
/// Set pvParam to TRUE to enable ToolTip animation or FALSE to disable it. If enabled, you can use SPI_SETTOOLTIPFADE to specify
/// fade or slide animation. Windows NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETTOOLTIPANIMATION = 0x1017,
///
@@ -2035,7 +2036,7 @@ namespace Vanara.PInvoke
/// possible only if the system has a color depth of more than 256 colors. For more information on the slide and fade effects,
/// see the AnimateWindow function. Windows NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETTOOLTIPFADE = 0x1019,
///
@@ -2051,7 +2052,7 @@ namespace Vanara.PInvoke
/// shadow or FALSE to disable the shadow. This effect appears only if the system has a color depth of more than 256 colors.
/// Windows NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETCURSORSHADOW = 0x101B,
///
@@ -2067,7 +2068,7 @@ namespace Vanara.PInvoke
/// pointer when the user presses and releases the CTRL key. The pvParam parameter specifies TRUE for on and FALSE for off. The
/// default is off. For more information, see About Mouse Input. Windows 2000/NT, Windows 98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETMOUSESONAR = 0x101D,
///
@@ -2083,7 +2084,7 @@ namespace Vanara.PInvoke
/// TRUE for on, or FALSE for off. The default is off. For more information, see Remarks and About Mouse Input on MSDN. Windows
/// 2000/NT, Windows 98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETMOUSECLICKLOCK = 0x101F,
///
@@ -2099,7 +2100,7 @@ namespace Vanara.PInvoke
/// user moves the mouse. The pvParam parameter specifies TRUE for on and FALSE for off. The default is off. For more
/// information, see About Mouse Input on MSDN. Windows 2000/NT, Windows 98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETMOUSEVANISH = 0x1021,
///
@@ -2116,7 +2117,7 @@ namespace Vanara.PInvoke
/// menu selection. If disabled, menus are drawn using the same metrics and colors as in Windows 2000 and earlier. Windows
/// 2000/NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETFLATMENU = 0x1023,
///
@@ -2130,7 +2131,7 @@ namespace Vanara.PInvoke
/// Enables or disables the drop shadow effect. Set pvParam to TRUE to enable the drop shadow effect or FALSE to disable it. You
/// must also have CS_DROPSHADOW in the window class style. Windows 2000/NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETDROPSHADOW = 0x1025,
///
@@ -2146,7 +2147,7 @@ namespace Vanara.PInvoke
/// mouse input. The uiParam parameter specifies TRUE if the screensaver will not be deactivated by simulated input, or FALSE if
/// the screensaver will be deactivated by simulated input.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, UiParam)]
SPI_SETBLOCKSENDINPUTRESETS = 0x1027,
///
@@ -2160,7 +2161,7 @@ namespace Vanara.PInvoke
/// Enables or disables UI effects. Set the pvParam parameter to TRUE to enable all UI effects or FALSE to disable all UI
/// effects. Windows NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETUIEFFECTS = 0x103F,
///
@@ -2186,7 +2187,7 @@ namespace Vanara.PInvoke
///
/// Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETDISABLEOVERLAPPEDCONTENT = 0x1041,
///
@@ -2210,7 +2211,7 @@ namespace Vanara.PInvoke
///
/// Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETCLIENTAREAANIMATION = 0x1043,
///
@@ -2228,7 +2229,7 @@ namespace Vanara.PInvoke
/// ClearType is a software technology that improves the readability of text on liquid crystal display (LCD) monitors.
/// Windows Server 2003 and Windows XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETCLEARTYPE = 0x1049,
/// Undocumented
@@ -2270,7 +2271,7 @@ namespace Vanara.PInvoke
/// where the legacy language bar is replaced by Input Switcher and therefore turned off by default. Turning the legacy language
/// bar on is provided for compatibility reasons and has no effect on the Input Switcher.
///
- [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(bool), CorrespondingAction.Set, Direct)]
SPI_SETSYSTEMLANGUAGEBAR = 0x1051,
///
@@ -2286,7 +2287,7 @@ namespace Vanara.PInvoke
/// themselves into the foreground. Set pvParam to the new timeout value. The calling thread must be able to change the
/// foreground window, otherwise the call fails. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001,
///
@@ -2300,7 +2301,7 @@ namespace Vanara.PInvoke
/// Sets the active window tracking delay. Set pvParam to the number of milliseconds to delay before activating the window under
/// the mouse pointer. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETACTIVEWNDTRKTIMEOUT = 0x2003,
///
@@ -2314,7 +2315,7 @@ namespace Vanara.PInvoke
/// Sets the number of times SetForegroundWindow will flash the taskbar button when rejecting a foreground switch request. Set
/// pvParam to the number of times to flash. Windows NT, Windows 95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETFOREGROUNDFLASHCOUNT = 0x2005,
///
@@ -2328,7 +2329,7 @@ namespace Vanara.PInvoke
/// Sets the caret width in edit controls. Set pvParam to the desired width, in pixels. The default and minimum value is 1.
/// Windows NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETCARETWIDTH = 0x2007,
///
@@ -2355,12 +2356,12 @@ namespace Vanara.PInvoke
SPI_GETFONTSMOOTHINGTYPE = 0x200A,
///
- /// Sets the font smoothing type. The pvParam parameter points to a UINT that contains either FE_FONTSMOOTHINGSTANDARD, if
- /// standard anti-aliasing is used, or FE_FONTSMOOTHINGCLEARTYPE, if ClearType is used. The default is FE_FONTSMOOTHINGSTANDARD.
- /// When using this option, the fWinIni parameter must be set to SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE; otherwise,
- /// SystemParametersInfo fails.
+ /// Sets the font smoothing type. The pvParam parameter is either FE_FONTSMOOTHINGSTANDARD, if standard anti-aliasing is used,
+ /// or FE_FONTSMOOTHINGCLEARTYPE, if ClearType is used. The default is FE_FONTSMOOTHINGSTANDARD.
+ /// SPI_SETFONTSMOOTHING must also be set.
+ /// Windows 2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETFONTSMOOTHINGTYPE = 0x200B,
///
@@ -2390,7 +2391,7 @@ namespace Vanara.PInvoke
/// Sets the height of the left and right edges of the focus rectangle drawn with DrawFocusRect to the value of the pvParam
/// parameter. Windows 2000/NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETFOCUSBORDERWIDTH = 0x200F,
///
@@ -2404,7 +2405,7 @@ namespace Vanara.PInvoke
/// Sets the height of the top and bottom edges of the focus rectangle drawn with DrawFocusRect to the value of the pvParam
/// parameter. Windows 2000/NT, Windows Me/98/95: This value is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETFOCUSBORDERHEIGHT = 0x2011,
///
@@ -2419,7 +2420,7 @@ namespace Vanara.PInvoke
/// Sets the font smoothing orientation. The pvParam parameter is either FE_FONTSMOOTHINGORIENTATIONBGR (blue-green-red) or
/// FE_FONTSMOOTHINGORIENTATIONRGB (red-green-blue). Windows XP/2000: This parameter is not supported until Windows XP with SP2.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETFONTSMOOTHINGORIENTATION = 0x2013,
/// Undocumented
@@ -2443,7 +2444,7 @@ namespace Vanara.PInvoke
/// the text in notification messages. This flag enables you to set the message duration. Windows Server 2003 and Windows
/// XP/2000: This parameter is not supported.
///
- [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, DirectSetParam = true)]
+ [SPCorrespondingType(typeof(uint), CorrespondingAction.Set, Direct)]
SPI_SETMESSAGEDURATION = 0x2017,
///
@@ -4442,12 +4443,26 @@ namespace Vanara.PInvoke
{
if (!CorrespondingTypeAttribute.CanSet(uiAction, typeof(T))) throw new ArgumentException("Type mismatch.", nameof(setValue));
var spif = (updateUserProfile ? SPIF.SPIF_UPDATEINIFILE : 0) | (broadcastChange ? SPIF.SPIF_SENDCHANGE : 0);
- if (SPCorrespondingTypeAttribute.UseUI(uiAction))
- return SystemParametersInfo(uiAction, (uint)Convert.ChangeType(setValue, typeof(uint)), IntPtr.Zero, spif);
- else
+
+ var setMethod = SPCorrespondingTypeAttribute.SetMethodIs(uiAction);
+ if (setMethod is Pointer or Direct)
{
- using var ptr = SPCorrespondingTypeAttribute.DirectSet(uiAction) ? new SafeHGlobalHandle(new IntPtr((int)Convert.ChangeType(setValue, typeof(int))), 0, false) : SafeHGlobalHandle.CreateFromStructure(setValue);
- return SystemParametersInfo(uiAction, ptr.Size > sizeof(uint) ? ptr.Size : 0U, (IntPtr)ptr, spif);
+ SafeHGlobalHandle ptr;
+ if (setMethod == Pointer)
+ {
+ ptr = SafeHGlobalHandle.CreateFromStructure(setValue);
+ }
+ else // setMethod == Direct
+ {
+ var directValue = (int) Convert.ChangeType(setValue, typeof(int));
+ ptr = new SafeHGlobalHandle(new IntPtr(directValue), 0, false);
+ }
+ return SystemParametersInfo(uiAction, ptr.Size > sizeof(uint) ? ptr.Size : 0U, (IntPtr) ptr, spif);
+ }
+ else // setMethod == UiParam
+ {
+ var uiParam = (uint) Convert.ChangeType(setValue, typeof(uint));
+ return SystemParametersInfo(uiAction, uiParam, IntPtr.Zero, spif);
}
}
@@ -5076,15 +5091,20 @@ namespace Vanara.PInvoke
internal class SPCorrespondingTypeAttribute : CorrespondingTypeAttribute
{
- public SPCorrespondingTypeAttribute(Type typeRef, CorrespondingAction action, bool useUiParam = false) : base(typeRef, action) => UseUiParam = useUiParam;
+ internal enum SetParameterMethod
+ {
+ Pointer,
+ Direct,
+ UiParam
+ }
- public bool DirectSetParam { get; set; } = false;
+ public SPCorrespondingTypeAttribute(Type typeRef, CorrespondingAction action,
+ SetParameterMethod type = Pointer) : base(typeRef, action) => Type = type;
- public bool UseUiParam { get; }
+ public SetParameterMethod Type { get; }
- public static bool DirectSet(object value) => GetAttrForObj(value).OfType().Any(a => a.DirectSetParam);
-
- public static bool UseUI(object value) => GetAttrForObj(value).OfType().Any(a => a.UseUiParam);
- }
+ public static SetParameterMethod SetMethodIs(object value) =>
+ GetAttrForObj(value).OfType().FirstOrDefault()?.Type ?? Pointer;
+}
}
}
\ No newline at end of file