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

如何通过Add-Type调用C#代码禁用PowerShell Windows Forms的关闭(X)按钮

PowerShell 5.1 禁用WinForm窗口关闭按钮(X)的正确实现

问题原因

原代码报错的核心原因是C#代码片段未显式定义继承自Form的子类,重写CreateParams的逻辑没有所属类,导致Add-Type编译阶段失败。

正确可运行代码

Add-Type -AssemblyName System.Windows.Forms

# 定义继承自Form的自定义子类,重写CreateParams实现禁用关闭按钮
$codeDisableX = @"
using System.Windows.Forms;
public class NoCloseForm : Form
{
    private const int CP_NOCLOSE_BUTTON = 0x200;
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams myCp = base.CreateParams;
            myCp.ClassStyle |= CP_NOCLOSE_BUTTON;
            return myCp;
        }
    }
}
"@

# 编译C#自定义类
Add-Type -TypeDefinition $codeDisableX -ReferencedAssemblies System.Windows.Forms -Language CSharp

# 实例化自定义的NoCloseForm类,而不是原生Form类
$root = [NoCloseForm]::new()
$root.Text = "禁用关闭按钮测试窗口"
$root.Width = 300
$root.Height = 200

# 此处可添加其他控件、事件逻辑

# 显示窗口
$root.ShowDialog()

效果说明

该实现仅禁用窗口右上角的关闭按钮,最小化、最大化按钮功能保持正常,也不会隐藏标题栏图标,符合不使用$root.ControlBox = $false的需求。

内容的提问来源于stack exchange,提问作者howdoicode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:03