diff --git a/PInvoke/Shared/Vanara.PInvoke.Shared.csproj b/PInvoke/Shared/Vanara.PInvoke.Shared.csproj
index 3733e314..e0b6c602 100644
--- a/PInvoke/Shared/Vanara.PInvoke.Shared.csproj
+++ b/PInvoke/Shared/Vanara.PInvoke.Shared.csproj
@@ -31,6 +31,11 @@ CharacterSet, CM_RESOURCE, CM_SHARE_DISPOSITION, CmResourceType, DMCOLLATE, DMCO
+
+
+ 3.1.0
+
+
4.6.0
diff --git a/PInvoke/Shared/WinUser/Macros.cs b/PInvoke/Shared/WinUser/Macros.cs
index 746ddec4..b7ff243e 100644
--- a/PInvoke/Shared/WinUser/Macros.cs
+++ b/PInvoke/Shared/WinUser/Macros.cs
@@ -26,6 +26,11 @@ namespace Vanara.PInvoke
/// The return value is the high-order byte of the specified value.
public static byte HIBYTE(ushort wValue) => (byte)((wValue >> 8) & 0xff);
+ /// Gets the high 8-bytes from a value.
+ /// The value.
+ /// The high 8-bytes as a .
+ public static int HighPart(this long lValue) => unchecked((int)(lValue >> 32));
+
/// Retrieves the high-order word from the specified 32-bit value.
/// The value to be converted.
/// The return value is the high-order word of the specified value.
@@ -52,6 +57,11 @@ namespace Vanara.PInvoke
/// The return value is the low-order byte of the specified value.
public static byte LOBYTE(ushort wValue) => (byte)(wValue & 0xff);
+ /// Gets the lower 8-bytes from a value.
+ /// The value.
+ /// The lower 8-bytes as a .
+ public static uint LowPart(this long lValue) => (uint)(lValue & 0xffffffff);
+
/// Retrieves the low-order word from the specified 32-bit value.
/// The value to be converted.
/// The return value is the low-order word of the specified value.
@@ -88,6 +98,12 @@ namespace Vanara.PInvoke
/// The return value is a LONG64 value.
public static ulong MAKELONG64(uint dwLow, uint dwHigh) => ((ulong)dwHigh << 32) | ((ulong)dwLow & 0xffffffff);
+ /// Creates a LONG64 value by concatenating the specified values.
+ /// The low-order double word of the new value.
+ /// The high-order double word of the new value.
+ /// The return value is a LONG64 value.
+ public static long MAKELONG64(uint dwLow, int dwHigh) => ((long)dwHigh << 32) | ((long)dwLow & 0xffffffff);
+
/// Creates a value for use as an lParam parameter in a message. The macro concatenates the specified values.
/// The low-order word of the new value.
/// The high-order word of the new value.