반응형
/*
* 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();}}}
'Windows_ > Windows_C# & App' 카테고리의 다른 글
C#: 주기, 시간마다 같은행동 반복하기 (2) | 2014.09.04 |
---|---|
C# 에서 win32 API 사용하기 (0) | 2014.09.04 |
Windows 자료형과 MBCS와 WBCS 호환 (0) | 2014.07.24 |
LINQ를 이용한 객체 데이터 정렬 (0) | 2014.07.24 |
C#: 텍스트 프로그램 구현하기 (2) | 2014.07.24 |