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();
            }
        }
    }
  • 相关阅读:
    使用Wireshark捕捉USB通信数据
    simtrace之探秘SIM卡中的世界
    极客DIY:RFID飞贼打造一款远距离渗透利器
    C118+Osmocom-bb+Openbts搭建小型基站
    天猫标的就是虚价,果然败家节啊
    为什么项目的jar包会和tomcat的jar包冲突?
    Spring-JDBC实现Contact的CRUD
    使用maven下载jar包的source和javadoc
    Spring-Context的注解实现依赖注入功能
    [html]三列居中自动伸缩的结构
  • 原文地址:https://www.cnblogs.com/gaocong/p/8707954.html
Copyright © 2011-2022 走看看