C#键盘控制

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

namespace WQ
{
    /// <summary>
    /// 键盘
    /// </summary>
    public class Keyboard
    {
        //  https://spidersharp.com/?p=137
        //  https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes

        
        
        //  https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-keybd_event?redirectedfrom=MSDN

        /// <summary>
        /// 
        /// </summary>
        /// <param name="bVk">虚拟键码。</param>
        /// <param name="bScan"></param>
        /// <param name="dwFlags"></param>
        /// <param name="dwExtraInfo"></param>
        [DllImport("user32.dll")]
        private extern static void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);



        //  https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeystate

        /// <summary>
        /// 获取虚拟键的状态。
        /// </summary>
        /// <param name="nVirtKey">虚拟键码。</param>
        /// <returns>虚拟键的状态。</returns>
        [DllImport("user32.dll")]
        private extern static int GetKeyState(int nVirtKey);





        /// <summary>
        /// 全选,然后删除。
        /// </summary>
        public static void CtrlA_Delete()
        {
            keybd_event(17, 0, 0, 0);   // 按下ctrl键
            keybd_event(65, 0, 0, 0);   // 按下A键
            keybd_event(65, 0, 2, 0);   // 松开A键
            keybd_event(17, 0, 2, 0);   // 松开ctrl键

            keybd_event(46, 0, 0, 0);   // delete
            keybd_event(46, 0, 2, 0);
        }

        /// <summary>
        /// 退格。
        /// </summary>
        /// <param name="count">按退格键的次数。</param>
        public static void Backspace(byte count)
        {
            for (byte m = 0; m < count; m++)
            {
                keybd_event(8, 0, 0, 0);        // backspace
                keybd_event(8, 0, 2, 0);
            }
        }

        /// <summary>
        /// 删除。
        /// </summary>
        /// <param name="count">按删除键的次数。</param>
        public static void Delete(byte count)
        {
            for (byte m = 0; m < count; m++)
            {
                keybd_event(46, 0, 0, 0);       // delete
                keybd_event(46, 0, 2, 0);
            }
        }

        /// <summary>
        /// 回车。
        /// </summary>
        public static void Enter()
        {
            keybd_event(13, 0, 0, 0);           // enter
            keybd_event(13, 0, 2, 0);
        }

        /// <summary>
        /// 大写锁定。
        /// </summary>
        public static void Capslock()
        {
            if (GetKeyState(20) == 0)           // 判断大写锁定键状态
            {
                keybd_event(20, 0, 0, 0);       // capslock
                keybd_event(20, 0, 2, 0);
            }
        }

        /// <summary>
        /// 取消大写锁定。
        /// </summary>
        public static void Capslock_Cancel()
        {
            if (GetKeyState(20) == 1)           // 判断大写锁定键状态
            {
                keybd_event(20, 0, 0, 0);       // capslock
                keybd_event(20, 0, 2, 0);
            }
        }

        /// <summary>
        /// 输入。仅支持:英文字母、英文符号、数字。
        /// </summary>
        /// <param name="str">要输入的内容。</param>
        public static void Input(string str)
        {
            for (uint m=0;m<str.Length;m++)
            {
                char ch = str.ToCharArray()[m];
                
                Capslock();                     // 大写锁定

                if (97 <= ch && ch <= 122)      // 小写字母:97≤ch≤122
                    Capslock_Cancel();

                if (65 <= ch && ch <= 90)       // 大写字母:65≤ch≤90
                    ch = char.ToLower(ch);

                switch (ch)
                {
                    case 'a':
                        keybd_event(65, 0, 0, 0);
                        keybd_event(65, 0, 2, 0);
                        break;
                    case 'b':
                        keybd_event(66, 0, 0, 0);
                        keybd_event(66, 0, 2, 0);
                        break;
                    case 'c':
                        keybd_event(67, 0, 0, 0);
                        keybd_event(67, 0, 2, 0);
                        break;
                    case 'd':
                        keybd_event(68, 0, 0, 0);
                        keybd_event(68, 0, 2, 0);
                        break;
                    case 'e':
                        keybd_event(69, 0, 0, 0);
                        keybd_event(69, 0, 2, 0);
                        break;
                    case 'f':
                        keybd_event(70, 0, 0, 0);
                        keybd_event(70, 0, 2, 0);
                        break;
                    case 'g':
                        keybd_event(71, 0, 0, 0);
                        keybd_event(71, 0, 2, 0);
                        break;
                    case 'h':
                        keybd_event(72, 0, 0, 0);
                        keybd_event(72, 0, 2, 0);
                        break;
                    case 'i':
                        keybd_event(73, 0, 0, 0);
                        keybd_event(73, 0, 2, 0);
                        break;
                    case 'j':
                        keybd_event(74, 0, 0, 0);
                        keybd_event(74, 0, 2, 0);
                        break;
                    case 'k':
                        keybd_event(75, 0, 0, 0);
                        keybd_event(75, 0, 2, 0);
                        break;
                    case 'l':
                        keybd_event(76, 0, 0, 0);
                        keybd_event(76, 0, 2, 0);
                        break;
                    case 'm':
                        keybd_event(77, 0, 0, 0);
                        keybd_event(77, 0, 2, 0);
                        break;
                    case 'n':
                        keybd_event(78, 0, 0, 0);
                        keybd_event(78, 0, 2, 0);
                        break;
                    case 'o':
                        keybd_event(79, 0, 0, 0);
                        keybd_event(79, 0, 2, 0);
                        break;
                    case 'p':
                        keybd_event(80, 0, 0, 0);
                        keybd_event(80, 0, 2, 0);
                        break;
                    case 'q':
                        keybd_event(81, 0, 0, 0);
                        keybd_event(81, 0, 2, 0);
                        break;
                    case 'r':
                        keybd_event(82, 0, 0, 0);
                        keybd_event(82, 0, 2, 0);
                        break;
                    case 's':
                        keybd_event(83, 0, 0, 0);
                        keybd_event(83, 0, 2, 0);
                        break;
                    case 't':
                        keybd_event(84, 0, 0, 0);
                        keybd_event(84, 0, 2, 0);
                        break;
                    case 'u':
                        keybd_event(85, 0, 0, 0);
                        keybd_event(85, 0, 2, 0);
                        break;
                    case 'v':
                        keybd_event(86, 0, 0, 0);
                        keybd_event(86, 0, 2, 0);
                        break;
                    case 'w':
                        keybd_event(87, 0, 0, 0);
                        keybd_event(87, 0, 2, 0);
                        break;
                    case 'x':
                        keybd_event(88, 0, 0, 0);
                        keybd_event(88, 0, 2, 0);
                        break;
                    case 'y':
                        keybd_event(89, 0, 0, 0);
                        keybd_event(89, 0, 2, 0);
                        break;
                    case 'z':
                        keybd_event(90, 0, 0, 0);
                        keybd_event(90, 0, 2, 0);
                        break;

                    case '0':
                        keybd_event(96, 0, 0, 0);
                        keybd_event(96, 0, 2, 0);
                        break;
                    case '1':
                        keybd_event(97, 0, 0, 0);
                        keybd_event(97, 0, 2, 0);
                        break;
                    case '2':
                        keybd_event(98, 0, 0, 0);
                        keybd_event(98, 0, 2, 0);
                        break;
                    case '3':
                        keybd_event(99, 0, 0, 0);
                        keybd_event(99, 0, 2, 0);
                        break;
                    case '4':
                        keybd_event(100, 0, 0, 0);
                        keybd_event(100, 0, 2, 0);
                        break;
                    case '5':
                        keybd_event(101, 0, 0, 0);
                        keybd_event(101, 0, 2, 0);
                        break;
                    case '6':
                        keybd_event(102, 0, 0, 0);
                        keybd_event(102, 0, 2, 0);
                        break;
                    case '7':
                        keybd_event(103, 0, 0, 0);
                        keybd_event(103, 0, 2, 0);
                        break;
                    case '8':
                        keybd_event(104, 0, 0, 0);
                        keybd_event(104, 0, 2, 0);
                        break;
                    case '9':
                        keybd_event(105, 0, 0, 0);
                        keybd_event(105, 0, 2, 0);
                        break;
                    
                    case '*':
                        keybd_event(106, 0, 0, 0);
                        keybd_event(106, 0, 2, 0);
                        break;
                    case '+':
                        keybd_event(107, 0, 0, 0);
                        keybd_event(107, 0, 2, 0);
                        break;
                    case '-':
                        keybd_event(109, 0, 0, 0);
                        keybd_event(109, 0, 2, 0);
                        break;
                    case '.':
                        keybd_event(110, 0, 0, 0);
                        keybd_event(110, 0, 2, 0);
                        break;
                    case '/':
                        keybd_event(111, 0, 0, 0);
                        keybd_event(111, 0, 2, 0);
                        break;

                    case '=':
                        keybd_event(187, 0, 0, 0);
                        keybd_event(187, 0, 2, 0);
                        break;

                    case '~':
                        keybd_event(16, 0, 0, 0);       // 按下shift键
                        keybd_event(192, 0, 0, 0);      // 按下~键
                        keybd_event(192, 0, 2, 0);      // 松开~键
                        keybd_event(16, 0, 2, 0);       // 松开shift键
                        break;
                    case '!':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(49, 0, 0, 0);
                        keybd_event(49, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '@':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(50, 0, 0, 0);
                        keybd_event(50, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '#':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(51, 0, 0, 0);
                        keybd_event(51, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '$':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(52, 0, 0, 0);
                        keybd_event(52, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '%':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(53, 0, 0, 0);
                        keybd_event(53, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '^':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(54, 0, 0, 0);
                        keybd_event(54, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '&':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(55, 0, 0, 0);
                        keybd_event(55, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '(':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(57, 0, 0, 0);
                        keybd_event(57, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case ')':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(48, 0, 0, 0);
                        keybd_event(48, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '_':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(189, 0, 0, 0);
                        keybd_event(189, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;

                    case '[':
                        keybd_event(219, 0, 0, 0);
                        keybd_event(219, 0, 2, 0);
                        break;
                    case ']':
                        keybd_event(221, 0, 0, 0);
                        keybd_event(221, 0, 2, 0);
                        break;
                    case '\\':
                        keybd_event(220, 0, 0, 0);
                        keybd_event(220, 0, 2, 0);
                        break;
                    case '{':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(219, 0, 0, 0);
                        keybd_event(219, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '}':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(221, 0, 0, 0);
                        keybd_event(221, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '|':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(220, 0, 0, 0);
                        keybd_event(220, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;

                    case ';':
                        keybd_event(186, 0, 0, 0);
                        keybd_event(186, 0, 2, 0);
                        break;
                    case '\'':
                        keybd_event(222, 0, 0, 0);
                        keybd_event(222, 0, 2, 0);
                        break;
                    case ':':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(186, 0, 0, 0);
                        keybd_event(186, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '"':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(222, 0, 0, 0);
                        keybd_event(222, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;

                    case ',':
                        keybd_event(188, 0, 0, 0);
                        keybd_event(188, 0, 2, 0);
                        break;
                    case '<':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(188, 0, 0, 0);
                        keybd_event(188, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '>':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(190, 0, 0, 0);
                        keybd_event(190, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                    case '?':
                        keybd_event(16, 0, 0, 0);
                        keybd_event(191, 0, 0, 0);
                        keybd_event(191, 0, 2, 0);
                        keybd_event(16, 0, 2, 0);
                        break;
                }
            }
        }

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值