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

如何让PowerShell弹窗强制用户响应,禁止操作其他应用程序?

实现强制响应的BIOS密码修改弹窗(锁定系统操作直到用户响应)

要让用户必须响应弹窗才能操作其他程序,核心是将弹窗设置为系统级模态窗口,阻止所有非弹窗的操作。以下是修改后的完整脚本,以及关键修改说明:

修改后的完整脚本

Add-Type -AssemblyName System.Windows.Forms

# 添加DefaultDesktopOnly参数,将弹窗设为系统级模态,强制用户响应
$result = [System.Windows.Forms.MessageBox]::Show(
    "是否要修改BIOS密码?",
    "BIOS密码修改",
    [System.Windows.Forms.MessageBoxButtons]::OKCancel,
    [System.Windows.Forms.MessageBoxIcon]::Question,
    [System.Windows.Forms.MessageBoxDefaultButton]::Button1,
    [System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly
)

if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
    $form = New-Object System.Windows.Forms.Form
    $form.Text = "修改BIOS密码"
    $form.Size = New-Object System.Drawing.Size(320,220)
    $form.StartPosition = "CenterScreen"
    # 设置窗口始终置顶,确保用户无法忽略
    $form.TopMost = $true

    $labelOld = New-Object System.Windows.Forms.Label
    $labelOld.Location = New-Object System.Drawing.Point(10,20)
    $labelOld.Size = New-Object System.Drawing.Size(280,20)
    $labelOld.Text = "输入旧BIOS密码:"
    $form.Controls.Add($labelOld)
    $textboxOld = New-Object System.Windows.Forms.TextBox
    $textboxOld.Location = New-Object System.Drawing.Point(10,40)
    $textboxOld.Size = New-Object System.Drawing.Size(260,20)
    $form.Controls.Add($textboxOld)

    $labelNew = New-Object System.Windows.Forms.Label
    $labelNew.Location = New-Object System.Drawing.Point(10,70)
    $labelNew.Size = New-Object System.Drawing.Size(280,20)
    $labelNew.Text = "输入新BIOS密码:"
    $form.Controls.Add($labelNew)
    $textboxNew = New-Object System.Windows.Forms.TextBox
    $textboxNew.Location = New-Object System.Drawing.Point(10,90)
    $textboxNew.Size = New-Object System.Drawing.Size(260,20)
    $form.Controls.Add($textboxNew)

    $button = New-Object System.Windows.Forms.Button
    $button.Location = New-Object System.Drawing.Point(75,130)
    $button.Size = New-Object System.Drawing.Size(75,23)
    $button.Text = "确定"
    $button.DialogResult = [System.Windows.Forms.DialogResult]::OK
    $form.Controls.Add($button)

    $form.Add_Shown({
        $textboxOld.Select()
    })
    $form.AcceptButton = $button

    # 以系统模态方式显示窗口,确保用户必须处理才能操作其他程序
    $result = $form.ShowDialog([IntPtr]::Zero)

    if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
        $oldPassword = $textboxOld.Text
        $newPassword = $textboxNew.Text
        (gwmi -Class Lenovo_SetBiosPassword -Namespace root\wmi).SetBiosPassword("pap,$oldPassword,$newPassword,ascii,us")
        # 提示弹窗同样设置为系统模态
        [System.Windows.Forms.MessageBox]::Show(
            "请重启设备以生效",
            "操作完成",
            [System.Windows.Forms.MessageBoxButtons]::OK,
            [System.Windows.Forms.MessageBoxIcon]::Exclamation,
            [System.Windows.Forms.MessageBoxDefaultButton]::Button1,
            [System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly
        )
    } else {
        [System.Windows.Forms.MessageBox]::Show(
            "密码修改已取消",
            "操作取消",
            [System.Windows.Forms.MessageBoxButtons]::OK,
            [System.Windows.Forms.MessageBoxIcon]::Exclamation,
            [System.Windows.Forms.MessageBoxDefaultButton]::Button1,
            [System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly
        )
    }
} else {
    [System.Windows.Forms.MessageBox]::Show(
        "密码修改已取消",
        "操作取消",
        [System.Windows.Forms.MessageBoxButtons]::OK,
        [System.Windows.Forms.MessageBoxIcon]::Exclamation,
        [System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly
    )
}

关键修改说明

  1. 系统模态弹窗参数:给所有MessageBox.Show添加[System.Windows.Forms.MessageBoxOptions]::DefaultDesktopOnly参数,该参数会让弹窗显示在系统默认桌面,并且强制用户必须响应弹窗才能操作任何其他窗口。
  2. 置顶窗口设置:给自定义的密码输入Form添加$form.TopMost = $true,确保窗口始终显示在所有窗口最上层,无法被其他窗口遮挡。
  3. 系统模态显示Form:使用$form.ShowDialog([IntPtr]::Zero)替代原有的$form.ShowDialog(),将Form设置为系统级模态窗口,进一步确保用户无法切换到其他应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:57:11