C#快键精灵

12 篇文章 18 订阅

我发过挺多工作中用到的C#内容,整体链接和内容去这里看下:C#基础知识体系框架图,及起对应我发过的博客_花开莫与流年错_的博客-CSDN博客_c#架构图

可以记住电脑上鼠标、键盘操作记录,用处就很多,比较灵活了,只要记下自己电脑上操作的内容,可以循环去模拟人为的执行。而我呢是用在自动化生产中,接收PLC命令后模拟人操作控制电脑上的软件。键盘和鼠标功能码与ascll码一致

对应开源代码:KeyMouseHook: 这是一个基于globalmousekeyhook 和 InputSimulator 的类似于按键精灵的模拟键盘按键和鼠标点击操作的扩展类库。可以检测并记录键盘和鼠标的活动,你可以录制你的键鼠操作的记录并进行回放,可模拟键盘输入和鼠标点击操作。

使用的话基本都是基于MouseKeyHook开发的,下面我来介绍下详细内容。

使用MouseKeyHook

其中主要两个接口:key键盘点击事件、mouse鼠标点击事件

namespace Gma.System.MouseKeyHook
public interface IKeyboardMouseEvents : IKeyboardEvents, IMouseEvents, IDisposable

namespace Gma.System.MouseKeyHook
{
    public static class Hook
    {
        public static IKeyboardMouseEvents AppEvents();
        public static IKeyboardMouseEvents GlobalEvents();
    }
}

使用代码

private IKeyboardMouseEvents m_GlobalHook;

public void Subscribe()
{
    m_GlobalHook = Hook.GlobalEvents();
    m_GlobalHook.MouseDownExt += GlobalHookMouseDownExt;

    m_GlobalHook.KeyDown += KeyEventHandler;
}
private void KeyEventHandler(object sender, KeyEventArgs e)
{
    // keyValue值对应键盘事件要参考下面System.Windows.Forms中Keys的定义
    Console.WriteLine(e.KeyValue);
 }
private void GlobalHookMouseDownExt(object sender, MouseEventExtArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Console.WriteLine("左键");
        key = 1;
    }
    if (e.Button == MouseButtons.Right)
    {
        Console.WriteLine("右键");
        m_GlobalHook.MouseDownExt -= GlobalHookMouseDownExt;
        m_GlobalHook.Dispose();
        key = 2;
    }
}

上面只触发了点击事件,还要获取当前点击位置

// 当前查看的代码是在定时器里面获取的,Cursor对象对应命名控件:System.Windows.Forms
Cursor.Position.X.ToString() + "," + Cursor.Position.Y.ToString();
// 获取屏幕整体宽度和高度,但是这里不是真实大小(被屏幕显示百分比重新计算后的)
Screen.PrimaryScreen.Bounds.Width + ", " + Screen.PrimaryScreen.Bounds.Height;

// 添加事件处理
keyboardWatcher.OnKeyboardInput += (s, e) =>
 { }
mouseWatcher.OnMouseInput += (s, e) => { }

运行快键记录

[DllImport("user32.dll")]
static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);
// 通过定时器和鼠标、键盘事件记录鼠标位置和事件,控制实现
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x * 65536 / 1920, y * 65536 / 1080, 0, 0);

InputSimulator对象中KeyPress虚拟按键、Mouse虚拟鼠标,由IKeyboardSimulator和IMouseSimulator声明。

鼠标Mouse移动

MoveMouseTo(double absoluteX, double absoluteY);
LeftButtonDown();
LeftButtonUp();
LeftButtonClick();
LeftButtonDoubleClick();
RightButtonDown();
RightButtonUp();
RightButtonClick();
RightButtonDoubleClick();
MiddleButtonDown();
MiddleButtonUp();
MiddleButtonClick();
Sleep(int millsecondsTimeout);

代码中触发键盘。KeyPress(单个键盘触发)、ModifiedKeyStroke(多个键盘同时触发)、TextEntry(输入文件)、Sleep(暂停)

sim.Keyboard
               .ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.VK_R)
               .Sleep(1000)
               .TextEntry("notepad")
               .Sleep(1000)
               .KeyPress(VirtualKeyCode.RETURN)
               .KeyPress(VirtualKeyCode.RETURN)
               .Sleep(1000)
               .TextEntry("0123456789")
               .Sleep(1000)
               .TextEntry(".")
               .Sleep(1000)
               .TextEntry(".")
               .Sleep(1000)
               .TextEntry(".")
               .Sleep(1000)
               .ModifiedKeyStroke(VirtualKeyCode.MENU, VirtualKeyCode.SPACE)
               .KeyPress(VirtualKeyCode.DOWN)
               .KeyPress(VirtualKeyCode.RETURN);

windows上每个按键的功能(可以自己在vs找到Forms中的Keys,按F12跳转到定义查看所有内容),对应映射的值拷贝到下面了,这里其实和ascll码是一样的,只不过还多了一些命令而已。

#region 程序集 System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Windows.Forms.dll
#endregion

using System.ComponentModel;
using System.Drawing.Design;
using System.Runtime.InteropServices;

namespace System.Windows.Forms
{
    //
    // 摘要:
    //     指定键代码和修饰符。
    [ComVisible(true)]
    [Editor("System.Windows.Forms.Design.ShortcutKeysEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    [Flags]
    [TypeConverter(typeof(KeysConverter))]
    public enum Keys
    {
        //
        // 摘要:
        //     若要从一个密钥值中提取修饰符位掩码。
        Modifiers = -65536,
        //
        // 摘要:
        //     不按任何键。
        None = 0,
        //
        // 摘要:
        //     鼠标左键。
        LButton = 1,
        //
        // 摘要:
        //     鼠标右键按钮中。
        RButton = 2,
        //
        // 摘要:
        //     CANCEL 键。
        Cancel = 3,
        //
        // 摘要:
        //     鼠标中键 (三个按钮的鼠标)。
        MButton = 4,
        //
        // 摘要:
        //     第一个 x 鼠标按钮 (五个按钮的鼠标)。
        XButton1 = 5,
        //
        // 摘要:
        //     第二个鼠标按钮 (五个按钮的鼠标) x。
        XButton2 = 6,
        //
        // 摘要:
        //     BACKSPACE 键。
        Back = 8,
        //
        // 摘要:
        //     TAB 键。
        Tab = 9,
        //
        // 摘要:
        //     LINEFEED 键。
        LineFeed = 10,
        //
        // 摘要:
        //     CLEAR 键。
        Clear = 12,
        //
        // 摘要:
        //     RETURN 键。
        Return = 13,
        //
        // 摘要:
        //     ENTER 键。
        Enter = 13,
        //
        // 摘要:
        //     SHIFT 键。
        ShiftKey = 16,
        //
        // 摘要:
        //     CTRL 键。
        ControlKey = 17,
        //
        // 摘要:
        //     ALT 键。
        Menu = 18,
        //
        // 摘要:
        //     PAUSE 键。
        Pause = 19,
        //
        // 摘要:
        //     CAPS LOCK 键。
        Capital = 20,
        //
        // 摘要:
        //     CAPS LOCK 键。
        CapsLock = 20,
        //
        // 摘要:
        //     IME Kana 模式键。
        KanaMode = 21,
        //
        // 摘要:
        //     IME Hanguel 模式键。 (保留为了兼容; 使用HangulMode)
        HanguelMode = 21,
        //
        // 摘要:
        //     IME Hangul 模式键。
        HangulMode = 21,
        //
        // 摘要:
        //     IME Junja 模式键。
        JunjaMode = 23,
        //
        // 摘要:
        //     IME 最终模式键。
        FinalMode = 24,
        //
        // 摘要:
        //     IME Hanja 模式键。
        HanjaMode = 25,
        //
        // 摘要:
        //     IME Kanji 模式键。
        KanjiMode = 25,
        //
        // 摘要:
        //     ESC 键。
        Escape = 27,
        //
        // 摘要:
        //     IME convert 键。
        IMEConvert = 28,
        //
        // 摘要:
        //     IME nonconvert 键。
        IMENonconvert = 29,
        //
        // 摘要:
        //     IME 接受密钥,替换System.Windows.Forms.Keys.IMEAceept。
        IMEAccept = 30,
        //
        // 摘要:
        //     IME 接受密钥。 已过时,请System.Windows.Forms.Keys.IMEAccept相反。
        IMEAceept = 30,
        //
        // 摘要:
        //     IME 模式更改密钥。
        IMEModeChange = 31,
        //
        // 摘要:
        //     SPACEBAR 键。
        Space = 32,
        //
        // 摘要:
        //     PAGE UP 键。
        Prior = 33,
        //
        // 摘要:
        //     PAGE UP 键。
        PageUp = 33,
        //
        // 摘要:
        //     PAGE DOWN 键。
        Next = 34,
        //
        // 摘要:
        //     PAGE DOWN 键。
        PageDown = 34,
        //
        // 摘要:
        //     END 键。
        End = 35,
        //
        // 摘要:
        //     HOME 键。
        Home = 36,
        //
        // 摘要:
        //     LEFT ARROW 键。
        Left = 37,
        //
        // 摘要:
        //     UP ARROW 键。
        Up = 38,
        //
        // 摘要:
        //     RIGHT ARROW 键。
        Right = 39,
        //
        // 摘要:
        //     DOWN ARROW 键。
        Down = 40,
        //
        // 摘要:
        //     SELECT 键。
        Select = 41,
        //
        // 摘要:
        //     PRINT 键。
        Print = 42,
        //
        // 摘要:
        //     EXECUTE 键。
        Execute = 43,
        //
        // 摘要:
        //     PRINT SCREEN 键。
        Snapshot = 44,
        //
        // 摘要:
        //     PRINT SCREEN 键。
        PrintScreen = 44,
        //
        // 摘要:
        //     INS 键。
        Insert = 45,
        //
        // 摘要:
        //     DEL 键。
        Delete = 46,
        //
        // 摘要:
        //     HELP 键。
        Help = 47,
        //
        // 摘要:
        //     0 键。
        D0 = 48,
        //
        // 摘要:
        //     1 键。
        D1 = 49,
        //
        // 摘要:
        //     2 键。
        D2 = 50,
        //
        // 摘要:
        //     3 键。
        D3 = 51,
        //
        // 摘要:
        //     4 键。
        D4 = 52,
        //
        // 摘要:
        //     5 键。
        D5 = 53,
        //
        // 摘要:
        //     6 键。
        D6 = 54,
        //
        // 摘要:
        //     7 键。
        D7 = 55,
        //
        // 摘要:
        //     8 键。
        D8 = 56,
        //
        // 摘要:
        //     9 键。
        D9 = 57,
        //
        // 摘要:
        //     A 键。
        A = 65,
        //
        // 摘要:
        //     B 键。
        B = 66,
        //
        // 摘要:
        //     C 键。
        C = 67,
        //
        // 摘要:
        //     D 键。
        D = 68,
        //
        // 摘要:
        //     E 键。
        E = 69,
        //
        // 摘要:
        //     F 键。
        F = 70,
        //
        // 摘要:
        //     G 键。
        G = 71,
        //
        // 摘要:
        //     H 键。
        H = 72,
        //
        // 摘要:
        //     I 键。
        I = 73,
        //
        // 摘要:
        //     J 键。
        J = 74,
        //
        // 摘要:
        //     K 键。
        K = 75,
        //
        // 摘要:
        //     L 键。
        L = 76,
        //
        // 摘要:
        //     M 键。
        M = 77,
        //
        // 摘要:
        //     N 键。
        N = 78,
        //
        // 摘要:
        //     O 键。
        O = 79,
        //
        // 摘要:
        //     P 键。
        P = 80,
        //
        // 摘要:
        //     Q 键。
        Q = 81,
        //
        // 摘要:
        //     R 键。
        R = 82,
        //
        // 摘要:
        //     S 键。
        S = 83,
        //
        // 摘要:
        //     T 键。
        T = 84,
        //
        // 摘要:
        //     U 键。
        U = 85,
        //
        // 摘要:
        //     V 键。
        V = 86,
        //
        // 摘要:
        //     W 键。
        W = 87,
        //
        // 摘要:
        //     X 键。
        X = 88,
        //
        // 摘要:
        //     Y 键。
        Y = 89,
        //
        // 摘要:
        //     Z 键。
        Z = 90,
        //
        // 摘要:
        //     左 Windows 徽标键 (Microsoft Natural Keyboard)。
        LWin = 91,
        //
        // 摘要:
        //     右 Windows 徽标键 (Microsoft Natural Keyboard)。
        RWin = 92,
        //
        // 摘要:
        //     应用程序密钥 (Microsoft Natural Keyboard)。
        Apps = 93,
        //
        // 摘要:
        //     计算机休眠键。
        Sleep = 95,
        //
        // 摘要:
        //     数字键盘上的 0 键。
        NumPad0 = 96,
        //
        // 摘要:
        //     数字键盘上的 1 键。
        NumPad1 = 97,
        //
        // 摘要:
        //     数字键盘上的 2 键。
        NumPad2 = 98,
        //
        // 摘要:
        //     数字键盘上的 3 键。
        NumPad3 = 99,
        //
        // 摘要:
        //     数字键盘上的 4 键。
        NumPad4 = 100,
        //
        // 摘要:
        //     数字键盘上的 5 键。
        NumPad5 = 101,
        //
        // 摘要:
        //     数字键盘上的 6 键。
        NumPad6 = 102,
        //
        // 摘要:
        //     数字键盘上的 7 键。
        NumPad7 = 103,
        //
        // 摘要:
        //     数字键盘上的 8 键。
        NumPad8 = 104,
        //
        // 摘要:
        //     数字键盘上的 9 键。
        NumPad9 = 105,
        //
        // 摘要:
        //     乘号键。
        Multiply = 106,
        //
        // 摘要:
        //     加号键。
        Add = 107,
        //
        // 摘要:
        //     分隔符键。
        Separator = 108,
        //
        // 摘要:
        //     减号键。
        Subtract = 109,
        //
        // 摘要:
        //     句点键。
        Decimal = 110,
        //
        // 摘要:
        //     除号键。
        Divide = 111,
        //
        // 摘要:
        //     F1 键。
        F1 = 112,
        //
        // 摘要:
        //     F2 键。
        F2 = 113,
        //
        // 摘要:
        //     F3 键。
        F3 = 114,
        //
        // 摘要:
        //     F4 键。
        F4 = 115,
        //
        // 摘要:
        //     F5 键。
        F5 = 116,
        //
        // 摘要:
        //     F6 键。
        F6 = 117,
        //
        // 摘要:
        //     F7 键。
        F7 = 118,
        //
        // 摘要:
        //     F8 键。
        F8 = 119,
        //
        // 摘要:
        //     F9 键。
        F9 = 120,
        //
        // 摘要:
        //     F10 键。
        F10 = 121,
        //
        // 摘要:
        //     F11 键。
        F11 = 122,
        //
        // 摘要:
        //     F12 键。
        F12 = 123,
        //
        // 摘要:
        //     F13 键。
        F13 = 124,
        //
        // 摘要:
        //     F14 键。
        F14 = 125,
        //
        // 摘要:
        //     F15 键。
        F15 = 126,
        //
        // 摘要:
        //     F16 键。
        F16 = 127,
        //
        // 摘要:
        //     F17 键。
        F17 = 128,
        //
        // 摘要:
        //     F18 键。
        F18 = 129,
        //
        // 摘要:
        //     F19 键。
        F19 = 130,
        //
        // 摘要:
        //     F20 键。
        F20 = 131,
        //
        // 摘要:
        //     F21 键。
        F21 = 132,
        //
        // 摘要:
        //     F22 键。
        F22 = 133,
        //
        // 摘要:
        //     F23 键。
        F23 = 134,
        //
        // 摘要:
        //     F24 键。
        F24 = 135,
        //
        // 摘要:
        //     NUM LOCK 键。
        NumLock = 144,
        //
        // 摘要:
        //     SCROLL LOCK 键。
        Scroll = 145,
        //
        // 摘要:
        //     左的 SHIFT 键。
        LShiftKey = 160,
        //
        // 摘要:
        //     右 SHIFT 键。
        RShiftKey = 161,
        //
        // 摘要:
        //     左 CTRL 键。
        LControlKey = 162,
        //
        // 摘要:
        //     右 CTRL 键。
        RControlKey = 163,
        //
        // 摘要:
        //     左 ALT 键。
        LMenu = 164,
        //
        // 摘要:
        //     右 ALT 键。
        RMenu = 165,
        //
        // 摘要:
        //     浏览器后退键 (Windows 2000 或更高版本)。
        BrowserBack = 166,
        //
        // 摘要:
        //     浏览器前进键 (Windows 2000 或更高版本)。
        BrowserForward = 167,
        //
        // 摘要:
        //     浏览器刷新键 (Windows 2000 或更高版本)。
        BrowserRefresh = 168,
        //
        // 摘要:
        //     浏览器停止键 (Windows 2000 或更高版本)。
        BrowserStop = 169,
        //
        // 摘要:
        //     浏览器搜索键 (Windows 2000 或更高版本)。
        BrowserSearch = 170,
        //
        // 摘要:
        //     浏览器收藏键 (Windows 2000 或更高版本)。
        BrowserFavorites = 171,
        //
        // 摘要:
        //     浏览器主页键 (Windows 2000 或更高版本)。
        BrowserHome = 172,
        //
        // 摘要:
        //     卷静音键 (Windows 2000 或更高版本)。
        VolumeMute = 173,
        //
        // 摘要:
        //     音量降低键 (Windows 2000 或更高版本)。
        VolumeDown = 174,
        //
        // 摘要:
        //     音量增大键 (Windows 2000 或更高版本)。
        VolumeUp = 175,
        //
        // 摘要:
        //     媒体下一曲目键 (Windows 2000 或更高版本)。
        MediaNextTrack = 176,
        //
        // 摘要:
        //     媒体上一曲目键 (Windows 2000 或更高版本)。
        MediaPreviousTrack = 177,
        //
        // 摘要:
        //     媒体停止键 (Windows 2000 或更高版本)。
        MediaStop = 178,
        //
        // 摘要:
        //     在媒体播放暂停键 (Windows 2000 或更高版本)。
        MediaPlayPause = 179,
        //
        // 摘要:
        //     启动邮件键 (Windows 2000 或更高版本)。
        LaunchMail = 180,
        //
        // 摘要:
        //     选择媒体键 (Windows 2000 或更高版本) 中。
        SelectMedia = 181,
        //
        // 摘要:
        //     启动应用程序一个键 (Windows 2000 或更高版本)。
        LaunchApplication1 = 182,
        //
        // 摘要:
        //     启动应用程序两个键 (Windows 2000 或更高版本)。
        LaunchApplication2 = 183,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 分号键。
        OemSemicolon = 186,
        //
        // 摘要:
        //     OEM 1 键。
        Oem1 = 186,
        //
        // 摘要:
        //     OEM 加上任何国家/地区键盘 (Windows 2000 或更高版本) 上的密钥。
        Oemplus = 187,
        //
        // 摘要:
        //     任何国家/地区键盘 (Windows 2000 或更高版本) 上的 OEM 逗号键。
        Oemcomma = 188,
        //
        // 摘要:
        //     OEM 减号键 (Windows 2000 或更高版本) 任何国家/地区键盘上。
        OemMinus = 189,
        //
        // 摘要:
        //     任何国家/地区键盘 (Windows 2000 或更高版本) 上的 OEM 期间键。
        OemPeriod = 190,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 问号键。
        OemQuestion = 191,
        //
        // 摘要:
        //     OEM 2 键。
        Oem2 = 191,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 颚化符键。
        Oemtilde = 192,
        //
        // 摘要:
        //     OEM 3 键。
        Oem3 = 192,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 左大括号键。
        OemOpenBrackets = 219,
        //
        // 摘要:
        //     OEM 4 键。
        Oem4 = 219,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 管道键。
        OemPipe = 220,
        //
        // 摘要:
        //     OEM 5 键。
        Oem5 = 220,
        //
        // 摘要:
        //     美国标准键盘 (Windows 2000 或更高版本) 上的 OEM 右大括号键。
        OemCloseBrackets = 221,
        //
        // 摘要:
        //     OEM 6 键。
        Oem6 = 221,
        //
        // 摘要:
        //     OEM 意见/双精度型引号密钥美国标准键盘 (Windows 2000 或更高版本) 上。
        OemQuotes = 222,
        //
        // 摘要:
        //     OEM 7 键。
        Oem7 = 222,
        //
        // 摘要:
        //     OEM 8 键。
        Oem8 = 223,
        //
        // 摘要:
        //     OEM 尖括号或 RT 102 键键盘 (Windows 2000 或更高版本) 上的反斜杠键。
        OemBackslash = 226,
        //
        // 摘要:
        //     OEM 102 键。
        Oem102 = 226,
        //
        // 摘要:
        //     PROCESS 键键中。
        ProcessKey = 229,
        //
        // 摘要:
        //     用于传递 Unicode 字符,就像它们是击键一样。 Packet 键值是用于非键盘输入方法的 32 位虚拟密钥值的低位字。
        Packet = 231,
        //
        // 摘要:
        //     ATTN 键。
        Attn = 246,
        //
        // 摘要:
        //     CRSEL 键。
        Crsel = 247,
        //
        // 摘要:
        //     EXSEL 键。
        Exsel = 248,
        //
        // 摘要:
        //     ERASE EOF 键。
        EraseEof = 249,
        //
        // 摘要:
        //     播放键。
        Play = 250,
        //
        // 摘要:
        //     缩放键。
        Zoom = 251,
        //
        // 摘要:
        //     留待将来使用的常数。
        NoName = 252,
        //
        // 摘要:
        //     PA1 键。
        Pa1 = 253,
        //
        // 摘要:
        //     CLEAR 键。
        OemClear = 254,
        //
        // 摘要:
        //     从一个密钥值中提取键代码的位屏蔽。
        KeyCode = 65535,
        //
        // 摘要:
        //     SHIFT 修改键。
        Shift = 65536,
        //
        // 摘要:
        //     CTRL 修改键。
        Control = 131072,
        //
        // 摘要:
        //     ALT 修改键。
        Alt = 262144 
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值