//
// 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);
}
}