笔记本小键盘提示 C#

穷人家的孩子,买了个笔记本愣是没有小键盘提示灯。

牛的是人家给了一个大写提示灯。

更牛的是他妈给了音量关闭打开的提示灯,还他妈是橙色的!!!!!!

没办法 弄了小程序 来判断是否打开小键盘了。

本来是想用键盘钩子的,不过发现焦点在任务管理器的时候键盘钩子是无法使用的。

转念一想 干嘛那么麻烦。直接检测小键盘不就得了。

直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace IsNumLock
{
    class Program
    {
        [DllImport("user32")]
        public static extern int GetKeyState(int intkey);//144检测NumLock是否打开

        [DllImport("Gdi32.dll")]
        static extern bool TextOutA(IntPtr hdc,int x,int y ,string lpString,int l);//WIN32 参数 在HDC上面输出文字

        [DllImport("user32")]
        public static extern IntPtr GetDesktopWindow();//获取桌面

        [DllImport("user32")]
        static extern IntPtr GetWindowDC(IntPtr hwnd);//获取桌面的DC

        static int i = -1;

        static IntPtr dc = GetWindowDC(GetDesktopWindow());

        static void Main(string[] args)
        {
            i = GetKeyState(144);
            while (true)
            {
                Thread.Sleep(TimeSpan.FromMilliseconds(100)); //阻断一百毫秒 ,不然CPU会增加
                KeyDown();//这里本来想用多线程的,不过发现如果处理不当 内存会递加倒不如直接是单线程了/
            }
        }
       
        static void KeyDown()
        {
            var op = GetKeyState(144);
            op = op == 65408 ? 0 : op == 65409 ? 1 : op;//这里写反了 将错就错了
            if (op != i)
            {
                i = op;
                dc = GetWindowDC(GetDesktopWindow());             
                TextOutA(dc, 0, 0, op == 0 ? "Close" : "Open ", 5);//向屏幕输出
                //这个参数 在桌面输出文字 ,应该还有一个方法来清空的桌面。不过发现会闪屏,也就算了
                //就算不刷新,系统也会自动刷新。
                //不会影响使用
            }
        }
    }
}

 

 内存占用还是可以

编译的时候,在属性里改成程序,不用控制台输出,改成64或者32 似乎没有什么影响

如果大家用的还是不错 可以加设置开机启动

代码:

            var Startrun = Environment.CurrentDirectory + "\\IsNumLock.exe";//程序所在的全路径
            RegistryKey RKey = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
            RKey.SetValue("IsNumLock", Startrun);

不用代码的方式就用手动修改注册表

 

win+r 打开运行 输入regedit 打开注册表

计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

之后右键 新建 -字符串值 重名为程序的名字,之后在点击此项 右键修改,将程序的目录输入进去就好了包括程序自己

像是

C:\Users\Aang\source\repos\IsNumLock\IsNumLock\bin\Debug\IsNumLock.exe

 

如果嫌弃注册表太麻烦了可以用

https://jingyan.baidu.com/article/eae07827ad2bba1fec5485ae.html这篇文章的介绍

 

百度云盘的下载方式程序下载

posted @ 2018-08-01 17:19  ARM830  阅读(589)  评论(0编辑  收藏  举报