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(); } } }