要设置窗口不被“显示桌面”放置到后台,可以使用以下代码:\n\ncsharp\nusing System;\nusing System.Runtime.InteropServices;\nusing Microsoft.Win32;\n\nnamespace WindowPlacement\n{\n public static class WindowPlacementHelper\n {\n private const int SWP_SHOWWINDOW = 0x40;\n private const int SWP_HIDEWINDOW = 0x80;\n private const int SWP_FRAMECHANGED = 0x20;\n private const int SWP_NOZORDER = 0x4;\n private const int SWP_NOACTIVATE = 0x10;\n\n private const int GWL_STYLE = -16;\n private const int WS_MINIMIZEBOX = 0x20000;\n private const int WS_EX_TOOLWINDOW = 0x80;\n\n private const int SPI_SETMINIMIZEDMETRICS = 0x2C;\n\n [DllImport("user32.dll")]\n private static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);\n\n [DllImport("user32.dll")]\n private static extern bool GetWindowPlacement(IntPtr hWnd, out WINDOWPLACEMENT lpwndpl);\n\n [DllImport("user32.dll")]\n private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);\n\n [DllImport("user32.dll")]\n private static extern int GetWindowLong(IntPtr hWnd, int nIndex);\n\n [DllImport("user32.dll")]\n private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);\n\n [DllImport("user32.dll")]\n private static extern bool SystemParametersInfo(int uiAction, int uiParam, IntPtr pvParam, int fWinIni);\n\n [StructLayout(LayoutKind.Sequential)]\n public struct WINDOWPLACEMENT\n {\n public int length;\n public int flags;\n public int showCmd;\n public POINT ptMinPosition;\n public POINT ptMaxPosition;\n public RECT rcNormalPosition;\n }\n\n [StructLayout(LayoutKind.Sequential)]\n public struct POINT\n {\n public int x;\n public int y;\n }\n\n [StructLayout(LayoutKind.Sequential)]\n public struct RECT\n {\n public int left;\n public int top;\n public int right;\n public int bottom;\n }\n\n public static void SetWindowNotOnDesktop(IntPtr hWnd)\n {\n const int SW_SHOWNORMAL = 1;\n const int SW_MINIMIZE = 6;\n\n WINDOWPLACEMENT placement;\n GetWindowPlacement(hWnd, out placement);\n\n if (placement.showCmd == SW_MINIMIZE)\n {\n placement.showCmd = SW_SHOWNORMAL;\n SetWindowPlacement(hWnd, ref placement);\n }\n\n int style = GetWindowLong(hWnd, GWL_STYLE);\n style &= ~WS_MINIMIZEBOX;\n SetWindowLong(hWnd, GWL_STYLE, style);\n\n SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE);\n\n SystemParametersInfo(SPI_SETMINIMIZEDMETRICS, 0, IntPtr.Zero, 0);\n }\n }\n\n public static class Program\n {\n static void Main()\n {\n // 获取当前应用程序的主窗口句柄\n IntPtr hWnd = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;\n\n // 设置窗口不被“显示桌面”放置到后台\n WindowPlacementHelper.SetWindowNotOnDesktop(hWnd);\n }\n }\n}\n\n\n在上面的代码中,我们创建了一个名为WindowPlacementHelper的静态类,其中包含了设置窗口不被“显示桌面”放置到后台的方法SetWindowNotOnDesktop。在Main方法中,我们获取了当前应用程序的主窗口句柄,并调用SetWindowNotOnDesktop方法来设置窗口的行为。\n\n请注意,该代码需要在.NET Framework 4.7.2或更高版本中运行,并且需要在管理员权限下运行。另外,由于涉及到对窗口样式的更改,可能会影响到应用程序的外观和用户体验,所以请在使用之前确认这是你想要的效果。

C# 代码示例:防止 .NET Framework 窗口被“显示桌面”放置到后台

原文地址: https://www.cveoy.top/t/topic/qjfu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录