C# winform BlockInput之后,为什么按任意键都可以唤醒键盘

本项目是一个winform程序,code如下

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;


namespace csharp_win_tool_turnoff_screen
{
    public partial class Form1 : Form
    {
        private const uint WM_SYSCOMMAND = 0x0112;
        private const uint SC_MONITORPOWER = 0xF170;
        public Form1()
        {
            InitializeComponent();
        }

        //关屏
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
        //禁止鼠标键盘动作
        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern bool BlockInput([In, MarshalAs(UnmanagedType.Bool)] bool fBlockIt);
        //锁屏切换到锁屏界面
        [DllImport("user32.dll")]
        public static extern bool LockWorkStation();

        private void button1_Click(object sender, EventArgs e)
        {
            BlockInput(true);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //关闭屏幕
            SendMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            BlockInput(true);
            SendMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2);
        }
    }
}

我执行的方法是button3_Click
我需要得到的效果是button3单击后锁定键盘和鼠标,关闭屏幕,
但是我实际测试的效果是,可以锁定键盘和鼠标,关闭屏幕,但是按任意个键屏幕就会亮

BlockInput(true) 阻塞键盘及鼠标事件到达应用程序

我已经使用BlockInput(true)阻止了,为什么屏幕还会亮呢?是哪个进程接受到之后打开的屏幕

阅读 2.5k
1 个回答

这是 Windows 2000 时代的 Win32API。

从 Windows Vista 开始不支持 64 位系统。

从 Windows 8 开始不支持带触屏设备的 32 位系统。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进