如何通过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
相关产品推荐
相关产品推荐

