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

请求提供VNC远程操作时显示黑屏并锁定交互的Python/C#脚本

VNC远程时锁定本地屏幕(黑屏+禁止交互)的实现脚本

Python 实现(Windows平台)

依赖pywin32库,通过创建全屏置顶窗口遮挡屏幕,同时拦截键盘鼠标输入,达到黑屏+禁止本地交互的效果。

安装依赖

pip install pywin32

脚本代码

import win32gui
import win32api
import win32con
import win32ui
from threading import Thread
import time

class BlackScreenLock:
    def __init__(self):
        self.hwnd = None
        self.running = True

    def create_black_window(self):
        # 获取屏幕尺寸
        screen_width = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
        screen_height = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)

        # 注册窗口类
        wc = win32gui.WNDCLASS()
        wc.lpfnWndProc = self.wnd_proc
        wc.lpszClassName = "BlackScreenClass"
        wc.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW)
        win32gui.RegisterClass(wc)

        # 创建全屏窗口
        self.hwnd = win32gui.CreateWindowEx(
            win32con.WS_EX_TOPMOST | win32con.WS_EX_LAYERED | win32con.WS_EX_TRANSPARENT,
            "BlackScreenClass",
            "",
            win32con.WS_POPUP | win32con.WS_VISIBLE,
            0, 0, screen_width, screen_height,
            0, 0, 0, None
        )

        # 设置窗口为黑色
        win32gui.SetLayeredWindowAttributes(self.hwnd, 0, 255, win32con.LWA_ALPHA)
        dc = win32gui.GetDC(self.hwnd)
        brush = win32ui.CreateBrush()
        brush.CreateSolidBrush(win32con.RGB(0, 0, 0))
        win32gui.FillRect(dc, (0, 0, screen_width, screen_height), brush.GetHandle())
        win32gui.ReleaseDC(self.hwnd, dc)

        # 置顶窗口
        win32gui.SetWindowPos(self.hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)

    def wnd_proc(self, hwnd, msg, wparam, lparam):
        # 拦截鼠标键盘消息
        if msg in [win32con.WM_MOUSEMOVE, win32con.WM_LBUTTONDOWN, win32con.WM_RBUTTONDOWN,
                   win32con.WM_KEYDOWN, win32con.WM_KEYUP]:
            return 0
        # 处理窗口关闭
        elif msg == win32con.WM_DESTROY:
            win32gui.PostQuitMessage(0)
            return 0
        return win32gui.DefWindowProc(hwnd, msg, wparam, lparam)

    def check_exit(self):
        # 按F12键退出黑屏状态
        while self.running:
            if win32api.GetAsyncKeyState(win32con.VK_F12) & 0x8000:
                self.running = False
                win32gui.DestroyWindow(self.hwnd)
                break
            time.sleep(0.1)

    def start(self):
        self.create_black_window()
        # 启动线程监听退出按键
        exit_thread = Thread(target=self.check_exit)
        exit_thread.start()
        # 消息循环
        win32gui.PumpMessages()

if __name__ == "__main__":
    lock = BlackScreenLock()
    lock.start()

使用说明

  1. 运行脚本后,屏幕会立即变为黑屏,本地用户无法操作
  2. 按F12键可解除黑屏,恢复正常交互

C# 实现(Windows平台)

通过Windows Forms创建无边框全屏窗口,设置黑色背景,同时禁用窗口的输入响应,达到锁定效果。

代码示例

using System;
using System.Windows.Forms;

namespace BlackScreenLock
{
    public partial class BlackScreenForm : Form
    {
        public BlackScreenForm()
        {
            InitializeComponent();
            // 设置全屏无边框
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            this.BackColor = System.Drawing.Color.Black;
            this.TopMost = true;
            // 禁用窗口的输入响应
            this.SetStyle(ControlStyles.Selectable, false);
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // 按F12退出
            if (keyData == Keys.F12)
            {
                this.Close();
                return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        // 拦截鼠标消息
        protected override void WndProc(ref Message m)
        {
            const int WM_MOUSEMOVE = 0x0200;
            const int WM_LBUTTONDOWN = 0x0201;
            const int WM_RBUTTONDOWN = 0x0204;
            const int WM_KEYDOWN = 0x0100;

            if (m.Msg == WM_MOUSEMOVE || m.Msg == WM_LBUTTONDOWN || m.Msg == WM_RBUTTONDOWN || m.Msg == WM_KEYDOWN)
            {
                return;
            }
            base.WndProc(ref m);
        }
    }

    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new BlackScreenForm());
        }
    }
}

使用说明

  1. 在Visual Studio中创建Windows Forms项目,替换上述代码
  2. 编译运行后,屏幕立即黑屏,本地无法操作
  3. 按F12键解除锁定

内容的提问来源于stack exchange,提问作者Hello Its Me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:17:19