You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除控制台应用程序的最小化、最大化及关闭按钮?

移除控制台窗口的最小化、最大化和关闭按钮

你的代码仅尝试删除了关闭按钮的系统菜单项,这不会直接移除标题栏上的按钮。要彻底隐藏三个按钮,需要修改控制台窗口的窗口样式,以下是可直接生效的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:01:11