1、 public event MouseEventHandler OnMouseActivity; public event KeyEventHandler KeyDown; public event KeyPressEventHandler KeyPress; public event KeyEventHandler KeyUp; public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); static int hMouseHook = 0; static int hKeyboardHook = 0; public
2、 const int WH_MOUSE_LL = 14; public const int WH_KEYBOARD_LL = 13; HookProc MouseHookProcedure; HookProc KeyboardHookProcedure; StructLayout(LayoutKind.Sequential) public class POINT public int x; public int y; public class MouseHookStruct public POINT pt; public int hwnd; public int wHitTestCode; p
3、ublic int dwExtraInfo; public class KeyboardHookStruct public int vkCode; public int scanCode; public int flags; public int time; DllImport(user32.dll,CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall) public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInsta
4、nce, int threadId); public static extern bool UnhookWindowsHookEx(int idHook); public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); public void Start() if(hMouseHook = 0) MouseHookProcedure = new HookProc(MouseHookProc); hMouseHook = SetWindowsHookEx( WH_MOUSE
5、_LL, MouseHookProcedure, Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly().GetModules()0), 0); if(hMouseHook = 0 ) Stop(); throw new Exception(SetWindowsHookEx failed.); if(hKeyboardHook = 0) KeyboardHookProcedure = new HookProc(KeyboardHookProc); hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL
6、, KeyboardHookProcedure, Assembly.GetExecutingAssembly().GetModules()0), if(hKeyboardHook = 0 ) SetWindowsHookEx ist failed. public void Stop() bool retMouse =true; bool retKeyboard = true; if(hMouseHook != 0) retMouse = UnhookWindowsHookEx(hMouseHook); hMouseHook = 0; if(hKeyboardHook ! retKeyboard
7、 = UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; if (!(retMouse & retKeyboard) throw new Exception(UnhookWindowsHookEx failed. private const int WM_MOUSEMOVE = 0x200; private const int WM_LBUTTONDOWN = 0x201; private const int WM_RBUTTONDOWN = 0x204; private const int WM_MBUTTONDOWN = 0x207
8、; private const int WM_LBUTTONUP = 0x202; private const int WM_RBUTTONUP = 0x205; private const int WM_MBUTTONUP = 0x208; private const int WM_LBUTTONDBLCLK = 0x203; private const int WM_RBUTTONDBLCLK = 0x206; private const int WM_MBUTTONDBLCLK = 0x209; private int MouseHookProc(int nCode, Int32 wPa
9、ram, IntPtr lParam) if (nCode = 0) & (OnMouseActivity!=null) MouseButtons button=MouseButtons.None; switch (wParam) case WM_LBUTTONDOWN: button=MouseButtons.Left; break; case WM_RBUTTONDOWN: button=MouseButtons.Right; int clickCount=0; if (button!=MouseButtons.None) if (wParam=WM_LBUTTONDBLCLK | wPa
10、ram=WM_RBUTTONDBLCLK) clickCount=2; else clickCount=1; MouseHookStruct MyMouseHookStruct = (MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct); MouseEventArgs e=new MouseEventArgs( button, clickCount, MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y, 0 ); OnMouseActivity(this, e);
11、 return CallNextHookEx(hMouseHook, nCode, wParam, lParam);user32) public static extern int ToAscii(int uVirtKey, int uScanCode, byte lpbKeyState, byte lpwTransKey, int fuState); public static extern int GetKeyboardState(byte pbKeyState); private const int WM_KEYDOWN = 0x100; private const int WM_KEY
12、UP = 0x101; private const int WM_SYSKEYDOWN = 0x104; private const int WM_SYSKEYUP = 0x105; private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) (KeyDown!=null | KeyUp!=null | KeyPress!=null) KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct) Marshal.PtrToStructure(lParam
13、, typeof(KeyboardHookStruct); if ( KeyDown!=null & ( wParam =WM_KEYDOWN | wParam=WM_SYSKEYDOWN ) Keys keyData=(Keys)MyKeyboardHookStruct.vkCode; KeyEventArgs e = new KeyEventArgs(keyData); KeyDown(this, e); if ( KeyPress! wParam =WM_KEYDOWN ) byte keyState = new byte256; GetKeyboardState(keyState);
14、byte inBuffer= new byte2; if (ToAscii(MyKeyboardHookStruct.vkCode, MyKeyboardHookStruct.scanCode, keyState, inBuffer, MyKeyboardHookStruct.flags)=1) KeyPressEventArgs e = new KeyPressEventArgs(char)inBuffer0); KeyPress(this, e); if ( KeyUp! ( wParam =WM_KEYUP | wParam=WM_SYSKEYUP ) KeyUp(this, e); r
15、eturn CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);Form1代码using System.Drawing;using System.Drawing.Drawing2D;namespace Patcher_采集 public partial class Form1 : Form System.Runtime.InteropServices.DllImport() private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int
16、 dwExtraInfo); const int MOUSEEVENTF_LEFTDOWN = 0x0002; const int MOUSEEVENTF_LEFTUP = 0x0004; / / 安装钩子/summaryparam name=idHookhProchModdwThreadIdreturns/returns DllImport( public static extern int SetWindowsHookEx(int idHook, HookProc hProc, IntPtr hMod, int dwThreadId); / 将hook信息传递到链表中下一个hook处理过程
17、hHooknCodewParamlParam public static extern int CallNextHookEx(int hHook, int nCode, IntPtr wParam, IntPtr lParam); / 卸载钩子 public static extern bool UnhookWindowsHookEx(int hHook); / 获取模块句柄 lpModuleNamekernel32.dll public static extern IntPtr GetModuleHandle(string lpModuleName); public struct KeyIn
18、foStruct public int vkCode; /按键键码 public int scanCode; public int flags; /键盘是否按下的标志 public int time; public int dwExtraInfo;User32.dll public static extern void keybd_event(Byte bVk, Byte bScan, Int32 dwFlags, Int32 dwExtraInfo); private const int WH_KEYBOARD_LL = 13; /钩子类型 全局钩子 private const int WM
19、_KEYUP = 0x101; /按键抬起 private const int WM_KEYDOWN = 0x100; /按键按下 private const int KEYEVENTF_KEYUP = 2; byte VK_Q = 0; / 坐标 private Point points; / 坐标个数索引 int pointIndex = 1; int nowPointIndex = 0; / 按键索引 int KeyIndex = 0; Label lb; / 输入框 TextBox txt; / LinkLabel /LinkLabel link; / 执行的动作顺序,保存的控件名称
20、string dongzuo = txtP1; int dongzuoIndex = 0; public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam); bool bStopMsg = false; int hHook = 0; GCHandle gc; string b = F2 int index = 0; private UserActivityHook hook; Icon icon1 = new Icon(Application.StartupPath+.emoticon-1.ico Icon icon2
21、 = new Icon(Application.StartupPath+.emoticon-2.ico public int MethodHookProc(int nCode, IntPtr wParam, IntPtr lParam) if (nCode KeyInfoStruct inputInfo = (KeyInfoStruct)Marshal.PtrToStructure(lParam, typeof(KeyInfoStruct); if (wParam = (IntPtr)WM_KEYDOWN) /如果按键按下 if (Keys)inputInfo.vkCode).ToString
22、() = b) if (timer1.Enabled = true) notifyIcon1.Icon = icon1; timer1.Enabled = false; else notifyIcon1.Icon = icon2; timer1.Enabled = true; if (bStopMsg) return 1; return CallNextHookEx(hHook, nCode, wParam, lParam);/继续传递消息 public Form1() InitializeComponent(); boBox1.SelectedIndex = 1;/默认索引值 boBox1.DropDownStyle = ComboBoxStyle.DropDownList;/仅在列表中选择 private void Form1_Load(object sender, EventArgs e) if (0 = hHook) HookProc KeyCallBack = new HookProc(MethodHookProc); hHook =
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2