// // Copyright (c) PlaceholderCompany. All rights reserved. // // // Copyright (c) 2022-2023 Peter Kirmeier namespace SystemTrayMenu.DllImports { using System; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Windows; using System.Windows.Interop; /// /// wraps the methodcalls to native windows dll's. /// public static partial class NativeMethods { private const int WS_EX_TOOLWINDOW = 0x00000080; private const int GWL_EXSTYLE = -20; internal static void HideFromAltTab(Window window) { WindowInteropHelper wndHelper = new WindowInteropHelper(window); if (Environment.Is64BitProcess) { long exStyle = (long)GetWindowLongPtr(wndHelper.Handle, GWL_EXSTYLE); exStyle |= WS_EX_TOOLWINDOW; // do not show when user presses alt + tab SetWindowLongPtr(wndHelper.Handle, GWL_EXSTYLE, (IntPtr)exStyle); } else { int exStyle = (int)GetWindowLong(wndHelper.Handle, GWL_EXSTYLE); exStyle |= WS_EX_TOOLWINDOW; // do not show when user presses alt + tab SetWindowLong(wndHelper.Handle, GWL_EXSTYLE, (IntPtr)exStyle); } } /// /// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindoww . /// /// The class name or a class atom. /// The window name. /// Handle to the window or NULL on failure. [SupportedOSPlatform("windows")] [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)] [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] internal static extern IntPtr User32FindWindow(string? lpClassName, string? lpWindowName); /// /// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowlongw . /// [SupportedOSPlatform("windows")] [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)] [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex); /// /// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowlongptrw . /// [SupportedOSPlatform("windows")] [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)] [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] private static extern IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex); /// /// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlongw . /// [SupportedOSPlatform("windows")] [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)] [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong); /// /// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlongptrw . /// [SupportedOSPlatform("windows")] [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)] [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)] private static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong); } }