zoukankan      html  css  js  c++  java
  • 硬件信息、键盘模拟及钩子、鼠标模拟及钩子等设备相关

    1、提供用户硬件唯一信息的辅助类 FingerprintHelper

    实现效果 

     1)本辅助类主要是用来方便实现获取用户硬件的相关信息,根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,获取一个8位唯一标识数字。 

     2)本辅助类只提供了一个公共的方法Value,它集合了CPU、网卡、磁盘、主板等信息,通过这个8位的数字标识,我们可以唯一区分一台电脑,类似我们每个人的指纹信息一样,很少会发生重复的现象,可以用在一些关键的注册授权机制上。

    实现代码 

    1)辅助类提供的方法接口如下所示:

    复制代码
    /// <summary>    
    /// 根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,    
    /// 获取一个8位唯一标识数字    
    /// </summary>    
    public static string Value()    
       
    /// <summary>    
    /// 获取硬件的标识信息    
    /// </summary>    
    private static string identifier(string wmiClass, string wmiProperty, string wmiMustBeTrue)    
       
    /// <summary>    
    /// 获取硬件的标识信息    
    /// </summary>    
    private static string identifier(string wmiClass, string wmiProperty)    
       
    /// <summary>    
    /// 获取CPU信息    
    /// </summary>    
    private static string cpuId()    
       
    /// <summary>    
    /// 获取BOIS主板标识信息    
    /// </summary>    
    private static string biosId()    
       
    /// <summary>    
    /// 获取主硬盘的标识信息    
    /// </summary>    
    /// <returns></returns>    
    private static string diskId()    
       
    /// <summary>    
    /// 获取主板的标识信息    
    /// </summary>    
    /// <returns></returns>    
    private static string baseId()    
       
    /// <summary>    
    /// 获取主视频控制器标识信息    
    /// </summary>    
    /// <returns></returns>    
    private static string videoId()    
       
    /// <summary>    
    /// 获取第一个可用网卡信息    
    /// </summary>    
    /// <returns></returns>    
    private static string macId()    
       
    /// <summary>    
    /// 转换内容为8位数字    
    /// </summary>    
    private static string pack(string text)
    复制代码

     

     

    2)

     

    辅助类

     

    FingerprintHelper的使用例子代码如下所示 

     string identity = FingerprintHelper.Value();   
    MessageUtil.ShowTips(identity);  
     

    2、获取系统信息、电脑CPU、磁盘、网卡、内存等相关信息辅助类 HardwareInfoHelper

    实现效果 

     1)本辅助类主要是用来方便获取系统信息、电脑CPU、磁盘、网卡、内存等相关信息

    实现代码  

    1)辅助类提供的方法接口如下所示:

     /// <summary>    

    复制代码
    /// 获得盘符为drvID的硬盘序列号,缺省为C    
    /// </summary>    
    /// <param name="drvID">盘符,如"C"</param>    
    /// <returns></returns>    
    public static string HDVal(string drvID)    
       
    /// <summary>    
    /// 获取默认C盘的磁盘序列号    
    /// </summary>    
    /// <returns></returns>    
    public static string HDVal()    
       
    /// <summary>    
    /// 获取硬盘ID    
    /// </summary>    
    /// <returns></returns>    
    public static string GetDiskID()    
       
    /// <summary>    
    /// 获取硬盘Model的信息    
    /// </summary>    
    public static string GetDiskModel()    
       
    /// <summary>    
    /// 获得Cpu使用率    
    /// </summary>    
    public static int GetCpuUsage()    
       
    /// <summary>    
    /// 获取CPU的ID    
    /// </summary>    
    /// <returns></returns>    
    public static string GetCPUId()    
       
    /// <summary>    
    /// 获取CPU的名称    
    /// </summary>    
    /// <returns></returns>    
    public static string GetCPUName()    
       
    /// <summary>    
    /// 返回USB盘符列表    
    /// </summary>    
    public static List<string> GetUSBDriveLetters()    
       
    /// <summary>    
    /// 获得硬盘信息    
    /// </summary>    
    public static HardDiskInfo GetHDInfo(byte driveIndex)   
      
      
    #region 其他数据    
       
    /// <summary>    
    /// 获取MAC地址    
    /// </summary>    
    /// <returns></returns>    
    public static string GetMacAddress()    
       
    /// <summary>    
    /// 获取IP地址    
    /// </summary>    
    public static string GetIPAddress()    
       
    /// <summary>    
    /// 获取操作系统的登录用户名    
    /// </summary>    
    public static string GetUserName()    
       
    /// <summary>    
    /// 获取计算机名    
    /// </summary>    
    public static string GetComputerName()    
       
    /// <summary>    
    /// 获取PC类型    
    /// </summary>    
    public static string GetSystemType()    
       
    /// <summary>    
    /// 获取物理内存    
    /// </summary>    
    public static string GetTotalPhysicalMemory()   
      
    #endregion 
    复制代码

    2)辅助类HardwareInfoHelper的使用例子代码如下所示  

    复制代码
    private void btnComputer_Click(object sender, EventArgs e)    
    {    
        string computerName = HardwareInfoHelper.GetComputerName();    
        string userName = HardwareInfoHelper.GetUserName();    
        string systemType = HardwareInfoHelper.GetSystemType();    
        string cpuid = HardwareInfoHelper.GetCPUId();    
        string cpuName = HardwareInfoHelper.GetCPUName();    
        int cpuUsage = HardwareInfoHelper.GetCpuUsage();    
        string diskId = HardwareInfoHelper.GetDiskID();    
        string ip = HardwareInfoHelper.GetIPAddress();    
        string macAddress = HardwareInfoHelper.GetMacAddress();    
        string memery = HardwareInfoHelper.GetTotalPhysicalMemory();    
       
        StringBuilder sb = new StringBuilder();    
        sb.AppendFormat("ComputerName:\t {0} \r\n", computerName);    
        sb.AppendFormat("UserName:\t {0} \r\n", userName);    
        sb.AppendFormat("SystemType:\t {0} \r\n", systemType);    
        sb.AppendFormat("CPU ID:\t {0} \r\n", cpuid);    
        sb.AppendFormat("CPU Name:\t {0} \r\n", cpuName);    
        sb.AppendFormat("CPU Usage:\t {0} \r\n", cpuUsage);    
        sb.AppendFormat("Disk Id:\t {0} \r\n", diskId);    
        sb.AppendFormat("IP:\t {0} \r\n", ip);    
        sb.AppendFormat("MacAddress:\t {0} \r\n", macAddress);    
        sb.AppendFormat("TotalPhysicalMemory:\t {0} \r\n", memery);    
        MessageUtil.ShowTips(sb.ToString());    
       
        string identity = FingerprintHelper.Value();    
        MessageUtil.ShowTips(identity);    
    复制代码

    }   

    3、键盘操作辅助类KeyboardHelper,提供属性访问敲击那个键,以及发送软键盘消息等操作。

    实现效果 

     1)本辅助类主要是用来方便实现访问键盘的大写键、数字键等键的开启情况,另外判断CTRL、Shift、Alt键是否按下的操作,辅助类也封装了发送软键盘消息等操作。

    实现代码 

    1)辅助类提供的方法接口如下所示:

    复制代码
    #region 键盘属性    
       
           /// <summary>    
           /// 判断ALT建是否按下    
           /// </summary>    
           public static bool AltKeyDown    
       
       
           /// <summary>    
           /// 判断Caps Lock大写键是否打开    
           /// </summary>    
           public static bool CapsLock    
       
           /// <summary>    
           /// 判断CTRL键是否按下    
           /// </summary>    
           public static bool CtrlKeyDown    
       
           /// <summary>    
           /// 判断Num Lock 数字键是否打开    
           /// </summary>    
           public static bool NumLock    
       
           /// <summary>    
           /// 判断Scroll Lock滚动锁定键是否打开    
           /// </summary>    
           public static bool ScrollLock    
       
           /// <summary>    
           /// 判断Shift键是否按下    
           /// </summary>    
           public static bool ShiftKeyDown   
      
      
           #endregion   
      
           #region 操作方法    
       
           /// <summary>    
           /// 发送一个或多个击键到活动窗口。    
           /// </summary>    
           /// <param name="keys">定义发送键的字符串。特殊控制键代码SHIFT(+),CTRL(^), ALT(%)。Send("{SPACE}")、Send("+{TAB}")</param>    
           public static void SendKeys(string keys)    
       
           /// <summary>    
           /// 发送一个或多个击键到活动窗口    
           /// </summary>    
           /// <param name="keys">定义发送键的字符串.特殊控制键代码SHIFT(+),CTRL(^), ALT(%)。Send("{SPACE}")、Send("+{TAB}")</param>    
           /// <param name="wait">指定是否要等待应用程序继续之前得到处理的击键。默认为True。    
           /// </param>    
           public static void SendKeys(string keys, bool wait)   
      
           #endregion  
    复制代码

    2)辅助类

     

    KeyboardHelper的使用例子代码如下所示  

    复制代码
    bool capsLock = KeyboardHelper.CapsLock;    
    bool numLock = KeyboardHelper.NumLock;    
    bool scrollLock = KeyboardHelper.ScrollLock;    
    KeyboardHelper.SendKeys("{TAB}"); //发送Tab键    
    KeyboardHelper.SendKeys("%{F4}"); //发送Alt + F4退出 
    复制代码


    相关的按键参考如下所示

    6、全局键盘钩子,用来捕捉系统全局的键盘输入辅助类 KeyboardHook

    实现效果 

     1)本辅助类主要是用来方便实现全局键盘钩子,用来捕捉系统全局的键盘输入。 

     2)通过键盘钩子,我们可以获取用户的各种按键信息,以及可以屏蔽指定按键的操作,全局键盘钩子,就如一扇门一样,可以记录相关的键盘输入操作,也可以增加指定的事件处理,可以控制键盘按键继续流转到其他程序中,或者屏蔽操作。最典型的钩子操作例子就是金山词霸等取词软件。 

     3)辅助类通过KeyboardHook.Enable()开始键盘钩子,通过KeyboardHook.Disable()禁用或者通过KeyboardHook.Remove(**)来移除指定的键盘钩子事件。 

    实现代码 

    1)辅助类提供的方法接口如下所示:

     /// <summary>    

    复制代码
    /// 判断是否CTRL键按下    
    /// </summary>    
    public static bool Control = false;    
       
    /// <summary>    
    /// 判断Shift键是否按下    
    /// </summary>    
    public static bool Shift = false;    
       
    /// <summary>    
    /// 检查Alt键是否按下    
    /// </summary>    
    public static bool Alt = false;    
       
    /// <summary>    
    /// 检查Windows键是否按下    
    /// </summary>    
    public static bool Win = false;    
       
    /// <summary>    
    /// 键盘敲击事件代理定义    
    /// </summary>    
    public delegate bool KeyPressed();    
       
    /// <summary>    
    /// 处理键盘按下委托函数    
    /// </summary>    
    /// <param name="key">    
    /// 按下的键。需检查CTRL、Shift、Win等键。    
    /// <returns>    
    /// 如果想应用程序能捕捉到,设置为True;如果设置为False,则键盘事件被屏蔽。    
    /// </returns>    
    public delegate bool KeyboardHookHandler(Keys key);    
       
    /// <summary>    
    /// 添加一个键盘钩子处理给当前的键    
    /// </summary>    
    public static KeyboardHookHandler KeyDown;    
       
    /// <summary>    
    /// 启动键盘钩子处理    
    /// </summary>    
    /// <returns>如无异常返回True</returns>    
    public static bool Enable()    
       
    /// <summary>    
    /// 禁用键盘钩子处理    
    /// </summary>    
    /// <returns>如果禁用成功,则返回True</returns>    
    public static bool Disable()    
       
    /// <summary>    
    /// 添加一个按下键的钩子处理    
    /// </summary>    
    /// <param name="key">按下的键</param>    
    /// <param name="callback">按键的处理事件函数</param>    
    public static bool AddKeyDown(Keys key, KeyPressed callback)    
       
    /// <summary>    
    /// 添加一个键弹起的钩子处理    
    /// </summary>    
    /// <param name="key">弹起的键</param>    
    /// <param name="callback">按键的处理事件函数</param>    
    public static bool AddKeyUp(Keys key, KeyPressed callback)    
       
    /// <summary>    
    /// 添加一个按下键的钩子处理    
    /// </summary>    
    /// <param name="key">按下的键</param>    
    /// <param name="callback">按键的处理事件函数</param>    
    public static bool Add(Keys key, KeyPressed callback)    
       
    /// <summary>    
    /// 移除一个按下键的钩子处理    
    /// </summary>    
    /// <param name="key">移除的按键</param>    
    public static bool RemoveDown(Keys key)    
       
    /// <summary>    
    /// 移除一个弹起键的钩子处理    
    /// </summary>    
    /// <param name="key">移除的按键</param>    
    public static bool RemoveUp(Keys key)    
       
    /// <summary>    
    /// 移除一个键的钩子处理    
    /// </summary>    
    /// <param name="key">移除的按键</param>    
    public static bool Remove(Keys key)    
       
    /// <summary>    
    /// 返回一个给定的键基于当前的控制键的字符串表示形式。    
    /// </summary>    
    /// <param name="key">当前的键</param>    
    /// <returns></returns>    
    public static string KeyToString(Keys key)  
    复制代码

     

     

    2)

     

    辅助类

     

    KeyboardHook的使用例子代码如下所示 

    复制代码
    private void btnKeyboadHook_Click(object sender, EventArgs e)    
    {    
        KeyboardHook.Enable();    
        KeyboardHook.Add(Keys.S, new KeyboardHook.KeyPressed(TestKeyboadHook));    
    }    
       
    private bool TestKeyboadHook()    
    {    
        //仅处理Alt + S 的钩子事件    
        if (KeyboardHook.Alt)    
        {    
            this.Text = DateTime.Now.ToString();    
            NativeMethods.BringToFront(this.Handle);    
        }    
        return true; //如果要被其他程序捕捉,返回True,否则返回False。    
    }    
       
    private void btnRemoveKeyboadHook_Click(object sender, EventArgs e)    
    {    
        KeyboardHook.Remove(Keys.S);    
    }  
    复制代码

      相关的按键参考如下所示

    4、鼠标辅助操作类,提供获取鼠标状态以及模拟鼠标点击等操作 MouseHelper

    实现效果 

     1)本辅助类主要是用来方便获取鼠标状态以及模拟鼠标点击等操作,通过该辅助类,可以获取鼠标是否安装、滚轮是否支持、或者模拟鼠标移动、单击、双击等操作。

      

    实现代码 

    1)辅助类提供的方法接口如下所示:

     #region 鼠标相关属性    

    复制代码
       
    /// <summary>    
    /// 检查鼠标是否已经安装.    
    /// </summary>    
    public static bool MousePresent    
       
    /// <summary>    
    /// 检查鼠标是否存在滚轮    
    /// </summary>    
    public static bool WheelExists    
       
    /// <summary>    
    /// 获取鼠标滚轮每次滚动的行数    
    /// </summary>    
    public static int WheelScrollLines   
      
    #endregion   
      
    #region 鼠标操作函数    
       
    /// <summary>    
    /// 连续两次鼠标单击之间会被处理成双击事件的间隔时间。    
    /// </summary>    
    /// <returns>以毫秒表示的双击时间</returns>    
    [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]    
    public static extern int GetDoubleClickTime();    
       
    /// <summary>    
    /// 检取光标的位置,以屏幕坐标表示。    
    /// </summary>    
    /// <param name="lpPoint">POINT结构指针,该结构接收光标的屏幕坐标。</param>    
    /// <returns>如果成功,返回值非零;如果失败,返回值为零。</returns>    
    [DllImport("user32.dll", EntryPoint = "GetCursorPos")]    
    public static extern int GetCursorPos(Point lpPoint);    
       
    /// <summary>    
    /// 把光标移到屏幕的指定位置。如果新位置不在由 ClipCursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。    
    /// </summary>    
    /// <param name="x">指定光标的新的X坐标,以屏幕坐标表示。</param>    
    /// <param name="y">指定光标的新的Y坐标,以屏幕坐标表示。</param>    
    /// <returns>如果成功,返回非零值;如果失败,返回值是零</returns>    
    [DllImport("user32.dll")]    
    public static extern int SetCursorPos(int x, int y);   
      
    #endregion   
      
    #region 封装函数    
       
    /// <summary>    
    /// 在当前鼠标的位置左键点击一下    
    /// </summary>    
    public static void MouseClick()    
       
    /// <summary>    
    /// 移动到坐标位置点击    
    /// </summary>    
    /// <param name="location">要点击的坐标位置,屏幕绝对值</param>    
    public static void MouseClick(Point location)    
       
    /// <summary>    
    /// 移动到坐标位置点击    
    /// </summary>    
    /// <param name="location">要点击的坐标位置,屏幕绝对值</param>    
    public static void MouseRightClick(Point location)    
       
    /// <summary>    
    /// 移动到坐标位置    
    /// </summary>    
    public static void MouseMove(Point location)   
      
    #endregion 
    复制代码
     

    2)

     

    辅助类

     

    MouseHelper的使用例子代码如下所示 

     操作比较简单,自己操作下即可。

     

    5、全局的鼠标钩子操作类,用作捕捉全局的鼠标输入操作的辅助类 MouseHook

    实现效果 

     1)本辅助类主要是用来方便实现全局的鼠标钩子,用作捕捉全局的鼠标输入操作。 

    实现代码 

    1)辅助类提供的方法接口如下所示:

    复制代码
    /// <summary>    
    /// 鼠标输入处理代理    
    /// </summary>    
    /// <param name="button">操作的鼠标键</param>    
    /// <returns>如果想应用程序能捕捉到,设置为True;如果设置为False,则鼠标事件被屏蔽。</returns>    
    public delegate bool MouseButtonHandler(MouseButtons button);    
       
    /// <summary>    
    /// 鼠标按键按下处理操作    
    /// </summary>    
    public static MouseButtonHandler ButtonDown;    
       
    /// <summary>    
    /// 鼠标按键弹起处理操作    
    /// </summary>    
    public static MouseButtonHandler ButtonUp;    
       
    /// <summary>    
    /// 鼠标移动处理操作    
    /// </summary>    
    public static MouseMoveHandler Moved;    
       
    /// <summary>    
    /// 鼠标滚动处理操作    
    /// </summary>    
    public static MouseScrollHandler Scrolled;    
       
    /// <summary>    
    /// 启动鼠标钩子处理    
    /// </summary>    
    /// <returns>如无异常则返回True</returns>    
    public static bool Enable()    
       
    /// <summary>    
    /// 禁用鼠标钩子操作    
    /// </summary>    
    /// <returns>禁用成功则返回True</returns>    
    public static bool Disable()   
    复制代码

    2)辅助类

     

    MouseHook的使用例子代码如下所示  

    复制代码
    private void btnMouseHook_Click(object sender, EventArgs e)    
    {    
        MouseHook.ButtonDown = new MouseHook.MouseButtonHandler(TestMouseHook);    
        MouseHook.Scrolled = new MouseHook.MouseScrollHandler(TestMouseScroll);    
        MouseHook.Enable();    
    }    
       
    private bool TestMouseHook(MouseButtons sender)    
    {    
        this.Text = string.Format("你单击了鼠标键:{0}", sender);    
        return true;    
    }    
       
    private bool TestMouseScroll(int delta)    
    {    
        this.Text = string.Format("你滚动了鼠标值:{0}", delta);    
        return true;    
    复制代码

    }    

  • 相关阅读:
    [转]CentOS 修改yum源为国内源
    著名的镜像网站
    [译]LRTHW练习五——更多的变量及输出打印
    CentOS足迹一
    LRTHW笔记二
    线程的创建和运行(未完待续)
    比较当前时间和给定时间大小
    单独管理image
    Java 修改页面排序条件
    Java 如何使用radio button保存值
  • 原文地址:https://www.cnblogs.com/zhaohainuo/p/2842225.html
Copyright © 2011-2022 走看看