@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: The GetWindowLongPtr API !!!32 Bit Windows On this platform this function is in fact a macro that calls GetWindowLong, so the '''EntryPoint''' property has to be set to the real function: !!!!C# Signature: [DllImport("user32.dll", EntryPoint="GetWindowLong")] static extern IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex); !!!!VB .NET Signature: <DllImport("user32.dll", EntryPoint:="GetWindowLong")> _ Private Shared Function GetWindowLongPtr(ByVal hWnd As HandleRef, <MarshalAs(UnmanagedType.I4)>nIndex As GWL) As IntPtr End Function !!!!VB Signature: Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" _ (ByVal prmlngWindowHandle As Long, _ ByVal prmlngIndex As WindowLongFlags) As Long !!!64 Bit Windows On this platform the actual function is called !!!!C# Signature: [DllImport("user32.dll", EntryPoint="GetWindowLongPtr")] private static extern IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex); !!!!VB .NET Signature: <DllImport("user32.dll", EntryPoint:="GetWindowLongPtr")> _ Private Shared Function GetWindowLongPtr(ByVal hWnd As HandleRef, <MarshalAs(UnmanagedType.I4)>nIndex As GWL) As IntPtr End Function !!!!VB Signature: Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" _ (ByVal prmlngWindowHandle As Long, _ ByVal prmlngIndex As WindowLongFlags) As Long !!!!User-Defined Types: [WindowLongFlags] To access the values referred to on MSDN declare the following enumeration. !!!!!C# enumeration: public enum GWL { GWL_WNDPROC = (-4), GWL_HINSTANCE = (-6), GWL_HWNDPARENT = (-8), GWL_STYLE = (-16), GWL_EXSTYLE = (-20), GWL_USERDATA = (-21), GWL_ID = (-12) } !!!!!VB.NET Enumeration: Public Enum GWL GWL_WNDPROC = -4 GWL_HINSTANCE = -6 GWL_HWNDPARENT = -8 GWL_STYLE = -16 GWL_EXSTYLE = -20 GWL_USERDATA = -21 GWL_ID = -12 End Enum !!!!Notes: None. !!!!Tips & Tricks: To make your code work on both Win32 and Win64, you can detect the size of '''IntPtr''', and call the appropriate function. You will have to give the two functions different names, of course. !!!!!C# Sample: [DllImport("user32.dll", EntryPoint="GetWindowLong")] private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex); [DllImport("user32.dll", EntryPoint="GetWindowLongPtr")] private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex); // This static method is required because Win32 does not support // GetWindowLongPtr directly public static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex) { if (IntPtr.Size == 8) return GetWindowLongPtr64(hWnd, nIndex); else return GetWindowLongPtr32(hWnd, nIndex); } !!!!!VB.NET Sample <DllImport("user32.dll", EntryPoint:="GetWindowLong")> _ Private Shared Function GetWindowLongPtr32(ByVal hWnd As HandleRef, ByVal nIndex As Integer) As IntPtr End Function <DllImport("user32.dll", EntryPoint:="GetWindowLongPtr")> _ Private Shared Function GetWindowLongPtr64(ByVal hWnd As HandleRef, ByVal nIndex As Integer) As IntPtr End Function ' This static method is required because Win32 does not support GetWindowLongPtr dirctly Public Shared Function GetWindowLongPtr(ByVal hWnd As HandleRef, ByVal nIndex As Integer) As IntPtr If IntPtr.Size = 8 Then Return GetWindowLongPtr64(hWnd, nIndex) Else Return GetWindowLongPtr32(hWnd, nIndex) End If End Function You might want to declare the first parameter as '''HandleRef''' rather than '''IntPtr'''. !!!!Sample Code: !!!!!C# Sample: //Returns the ID for a window given the handle for that window as returned by EnumChildWindows. //note that for this to work you will need to change the signature from 'int nIndex' to 'GWL nIndex' in all three places private string GetID(IntPtr winhandle) { IntPtr result; result = GetWindowLongPtr(winhandle, GWL.GWL_ID); return result.ToString(); } !!!!Alternative Managed API: Do you know one? Please contribute it! Documentation: GetWindowLongPtr@msdn on MSDN
Edit user32.getwindowl...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.