zoukankan      html  css  js  c++  java
  • 钩子监听键盘消息

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace HookForm
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            // ... { GLOBAL HOOK }
            [DllImport("user32.dll")]
            static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId);
    
            [DllImport("user32.dll")]
            static extern bool UnhookWindowsHookEx(IntPtr hInstance);
    
            [DllImport("user32.dll")]
            static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
    
            [DllImport("kernel32.dll")]
            static extern IntPtr LoadLibrary(string lpFileName);
    
            private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
    
            const int WH_KEYBOARD_LL = 13; // 全局LowLevel键盘上的挂钩号码
            const int WM_KEYDOWN = 0x100; // 按键消息
    
            private LowLevelKeyboardProc _proc = hookProc;
    
            private static IntPtr hhook = IntPtr.Zero;
    
            public void SetHook()
            {
                IntPtr hInstance = LoadLibrary("User32");
                hhook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0);
            }
    
            public static void UnHook()
            {
                UnhookWindowsHookEx(hhook);
            }
    
            public static IntPtr hookProc(int code, IntPtr wParam, IntPtr lParam)
            {
                if (code >= 0 && wParam == (IntPtr)WM_KEYDOWN)
                {
                    int vkCode = Marshal.ReadInt32(lParam);
                    //////按键ascii
                    if (vkCode.ToString() == "13")
                    {
                        MessageBox.Show("按了Enter");
                    }
                    return (IntPtr)1;
                }
                else
                    return CallNextHookEx(hhook, code, (int)wParam, lParam);
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // 安装钩子
                SetHook();
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //卸载钩子
                UnHook();
            }
        }
    }
  • 相关阅读:
    Beta 冲刺 (5/7)
    Beta 冲刺 (4/7)
    Beta 冲刺 (3/7)
    软件产品案例分析(团队)
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    BETA 版冲刺前准备
    Alpha事后诸葛(团队)
    设计模式——访问者模式
    设计模式——命令模式
  • 原文地址:https://www.cnblogs.com/gaocong/p/8707954.html
Copyright © 2011-2022 走看看