当前位置: 首页 > article >正文

C#如何锁定和解除鼠标及键盘BlockInput

在C#中,"BlockInput"通常指的是一个功能或方法,用于阻止或暂停用户输入一段时间。这在某些特定的应用场景下非常有用,比如在游戏中防止玩家连续快速点击导致游戏逻辑错误,或者在UI应用中防止用户在某个操作正在进行时进行其他操作。

导入user32.dll

[DllImport(“user32.dll”)]
static extern void BlockInput(bool Block);

代码锁定鼠标及键盘

/// <summary>
        /// 锁定鼠标及键盘
        /// </summary>
        /// <returns></returns>
        public static bool Lock()
        {
            if (IsAdministrator())
            {
                BlockInput(true);//锁定鼠标及键盘
                return true;
            }
            else
                return false;
        }

代码解除键盘鼠标锁定

 /// <summary>
        /// 解除键盘鼠标锁定
        /// </summary>
        /// <returns></returns>
        public static bool UnLock()
        {
            if (IsAdministrator())
            {
                BlockInput(false);//解除键盘鼠标锁定
                return true;
            }
            else
                return false;
        }

注意:Lock和Unlock需在一个线程里

用户强制解除

同时按Ctrl+Alt+Delete或休眠键等有优先级的键

C#源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Text;

namespace iSystem
{
    public class KeyboardBlocker
    {
        /// <summary>
        /// 锁定鼠标及键盘
        /// </summary>
        /// <returns></returns>
        public static bool Lock()
        {
            if (IsAdministrator())
            {
                BlockInput(true);//锁定鼠标及键盘
                return true;
            }
            else
                return false;
        }

        /// <summary>
        /// 解除键盘鼠标锁定
        /// </summary>
        /// <returns></returns>
        public static bool UnLock()
        {
            if (IsAdministrator())
            {
                BlockInput(false);//解除键盘鼠标锁定
                return true;
            }
            else
                return false;
        }

        /// <summary>
        /// 是否是管理员权限
        /// </summary>
        /// <returns></returns>
        public static bool IsAdministrator()
        {
            WindowsIdentity current = WindowsIdentity.GetCurrent();
            WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current);
            return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
        }

        [DllImport("user32.dll")]
        static extern void BlockInput(bool Block);

    }
}

使用

KeyboardBlocker.Lock();
KeyboardBlocker.UnLock();


http://www.kler.cn/a/383467.html

相关文章:

  • 使用TC命令模拟弱网丢包
  • Flask中@app.route()的methods参数详解
  • web三、 window对象,延时器,定时器,时间戳,location对象(地址),本地存储-localStorage,数组去重new Set
  • springboot481基于springboot社区老人健康信息管理系统(论文+源码)_kaic
  • Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
  • 0009.基于springboot+layui的ERP企业进销存管理系统
  • 08LangChain实战课 - 输出解析器深入与Pydantic解析器实战
  • 数据结构计算二叉树节点的个数
  • 代码随想录-字符串-实现strStr()--KMP
  • qgis加载获取远程wms数据失败
  • 【C++篇】无序中的法则:探索 STL之unordered_map 与 unordered_set容器的哈希美学
  • php Rides 存入list类型,然后拿2000条,后去除Rides2000条
  • SpringBoot整合Freemarker(二)
  • PHP反射API与面向对象编程:当“魔镜”遇上“家族聚会”
  • 域迁移相关数据集生成脚本
  • sql纵表转横表
  • WPF界面控件Essential Studio for WPF更新至2024 v3,具有更高性能 | 附下载
  • 看电动缸是如何提高农机的自动化水平
  • SQL 专项练习题(合集)
  • 《通过 Jmeter 压测存储过程详解》
  • Gitlab-执行器为Kubetnetes时的注意事项,解决DNS解析问题
  • 基于ExtendSim的库存与订购实验
  • spring-data-jpa 一对多,多对一,多对多
  • PathVariable annotation was empty on param 0.问题解决
  • 《C语言程序设计现代方法》note-3 选择语句 循环语句
  • C++(一)