请求提供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()
使用说明
- 运行脚本后,屏幕会立即变为黑屏,本地用户无法操作
- 按
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()); } } }
使用说明
- 在Visual Studio中创建Windows Forms项目,替换上述代码
- 编译运行后,屏幕立即黑屏,本地无法操作
- 按
F12键解除锁定
内容的提问来源于stack exchange,提问作者Hello Its Me
相关产品推荐
相关产品推荐

