After revising this problem, I worked a little and found a hybrid solution that would work for my needs.
I accepted p-daddy's suggestion : https://stackoverflow.com/a/166778/
And I changed the code to work for 32-bit and 64-bit compilers, using the hans-passant clause : https://stackoverflow.com/a/4646262
The result is the following:
const int GWL_STYLE = -16; const int WS_DISABLED = 0x08000000; public static int GetWindowLong(IntPtr hWnd, int nIndex) { if (IntPtr.Size == 4) { return GetWindowLong32(hWnd, nIndex); } return GetWindowLongPtr64(hWnd, nIndex); } public static int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong) { if (IntPtr.Size == 4) { return SetWindowLong32(hWnd, nIndex, dwNewLong); } return SetWindowLongPtr64(hWnd, nIndex, dwNewLong); } [DllImport("user32.dll", EntryPoint = "GetWindowLong", CharSet = CharSet.Auto)] private static extern int GetWindowLong32(IntPtr hWnd, int nIndex); [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr", CharSet = CharSet.Auto)] private static extern int GetWindowLongPtr64(IntPtr hWnd, int nIndex); [DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto)] private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", CharSet = CharSet.Auto)] private static extern int SetWindowLongPtr64(IntPtr hWnd, int nIndex, int dwNewLong); public static void SetNativeEnabled(IWin32Window control, bool enabled) { if (control == null || control.Handle == IntPtr.Zero) return; NativeMethods.SetWindowLong(control.Handle, NativeMethods.GWL_STYLE, NativeMethods.GetWindowLong(control.Handle, NativeMethods.GWL_STYLE) & ~NativeMethods.WS_DISABLED | (enabled ? 0 : NativeMethods.WS_DISABLED)); } public static void ShowChildModalToParent(IWin32Window parent, Form child) { if (parent == null || child == null) return;
KyleK Apr 18 '13 at 16:45 2013-04-18 16:45
source share