private static void _PostSystemCommand(Window window, SC command) { IntPtr hwnd = new WindowInteropHelper(window).Handle; if (hwnd == IntPtr.Zero || !NativeMethodsShell.IsWindow(hwnd)) { return; } NativeMethodsShell.PostMessage(hwnd, WM.SYSCOMMAND, new IntPtr((int)command), IntPtr.Zero); }
internal static void ShowSystemMenuPhysicalCoordinates(Window window, Point physicalScreenLocation) { const uint TPM_RETURNCMD = 0x0100; const uint TPM_LEFTBUTTON = 0x0; Verify.IsNotNull(window, "window"); IntPtr hwnd = new WindowInteropHelper(window).Handle; if (hwnd == IntPtr.Zero || !NativeMethodsShell.IsWindow(hwnd)) { return; } IntPtr hmenu = NativeMethodsShell.GetSystemMenu(hwnd, false); uint cmd = NativeMethodsShell.TrackPopupMenuEx(hmenu, TPM_LEFTBUTTON | TPM_RETURNCMD, (int)physicalScreenLocation.X, (int)physicalScreenLocation.Y, hwnd, IntPtr.Zero); if (0 != cmd) { NativeMethodsShell.PostMessage(hwnd, WM.SYSCOMMAND, new IntPtr(cmd), IntPtr.Zero); } }