Windows_/Windows_C# & App
C# 키보드 후킹 예제
sosal
2014. 9. 4. 15:02
반응형
/*
* http://sosal.kr/
* made by so_Sal
*/
https://gist.github.com/Stasonix/3181083
github에서 그대로 퍼왔습니다.
아래 코드는 후킹한 후에 원래 목적지로 가지 않는다는점...
원한다면 hookProc 함수에서 return (IntPtr)1; 을
CallNextHookEx(hhook, code, (int)wParam, lParam);로 고쳐주시면 됩니다.
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Text.RegularExpressions;using System.IO;using System.Drawing.Imaging;using System.Runtime.InteropServices;namespace WFA{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);//////ОБРАБОТКА НАЖАТИЯif (vkCode.ToString() == "162"){MessageBox.Show("You pressed a CTR");}return (IntPtr)1;}elsereturn CallNextHookEx(hhook, code, (int)wParam, lParam);}private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e){// убираем хукUnHook();}private void Form1_Load(object sender, EventArgs e){// Устанавливаем хукSetHook();}}}