如何移除控制台应用程序的最小化、最大化及关闭按钮?
移除控制台窗口的最小化、最大化和关闭按钮
你的代码仅尝试删除了关闭按钮的系统菜单项,这不会直接移除标题栏上的按钮。要彻底隐藏三个按钮,需要修改控制台窗口的窗口样式,以下是可直接生效的VB.NET方案:
Imports System.Runtime.InteropServices Class Program ' 窗口样式常量 Private Const WS_MINIMIZEBOX As Integer = &H20000 Private Const WS_MAXIMIZEBOX As Integer = &H10000 Private Const WS_SYSMENU As Integer = &H80000 Private Const GWL_STYLE As Integer = -16 <DllImport("kernel32.dll", ExactSpelling:=True)> Private Shared Function GetConsoleWindow() As IntPtr End Function <DllImport("user32.dll", EntryPoint:="GetWindowLongPtr")> Private Shared Function GetWindowLongPtr64(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As IntPtr End Function <DllImport("user32.dll", EntryPoint:="SetWindowLongPtr")> Private Shared Function SetWindowLongPtr64(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As IntPtr) As IntPtr End Function <DllImport("user32.dll")> Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As UInteger) As Boolean End Function Private Const SWP_NOMOVE As UInteger = &H2 Private Const SWP_NOSIZE As UInteger = &H1 Private Const SWP_FRAMECHANGED As UInteger = &H20 Private Shared Sub Main(ByVal args As String()) Dim consoleHandle As IntPtr = GetConsoleWindow() If consoleHandle = IntPtr.Zero Then Return ' 获取当前窗口样式 Dim currentStyle As IntPtr = GetWindowLongPtr64(consoleHandle, GWL_STYLE) ' 移除最小化、最大化、系统菜单样式 Dim newStyle As IntPtr = currentStyle And Not (WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SYSMENU) ' 设置新的窗口样式 SetWindowLongPtr64(consoleHandle, GWL_STYLE, newStyle) ' 更新窗口框架,让样式变更生效 SetWindowPos(consoleHandle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_FRAMECHANGED) Console.WriteLine("控制台按钮已移除,按任意键退出...") Console.ReadKey() End Sub End Class
关键说明:
- 移除
WS_MINIMIZEBOX、WS_MAXIMIZEBOX会直接隐藏标题栏的最小化、最大化按钮;移除WS_SYSMENU会同时隐藏关闭按钮和窗口右键菜单。 - 使用
GetWindowLongPtr64和SetWindowLongPtr64是为了兼容64位系统,避免指针截断导致的失效问题。 - 最后调用
SetWindowPos强制刷新窗口框架,确保样式修改立即生效。
内容的提问来源于stack exchange,提问作者MajedKM
相关产品推荐
相关产品推荐

