private static IntPtr LowLevelKeyboardProc(int nCode, uint wParam, IntPtr lParam) { if (nCode >= 0) { HookClass.KBDLLHOOKSTRUCT structure = (HookClass.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(HookClass.KBDLLHOOKSTRUCT)); if (wParam == 257U) { frmControl openForm = (frmControl)Application.OpenForms["frmControl"]; if (openForm != null) { int count = openForm.listVerses.Items.Count; int selectedIndex = openForm.listVerses.SelectedIndices[0]; if (structure.vkCode == 34) { if (selectedIndex + 1 <= count - 1) { openForm.listVerses.Items[selectedIndex + 1].Selected = true; } return(HookClass.CallNextHookEx(HookClass.keyHook, 0, 0U, IntPtr.Zero)); } if (structure.vkCode == 33) { if (selectedIndex - 1 >= 0) { openForm.listVerses.Items[selectedIndex - 1].Selected = true; } return(HookClass.CallNextHookEx(HookClass.keyHook, 0, 0U, IntPtr.Zero)); } } } } return(HookClass.CallNextHookEx(HookClass.keyHook, nCode, wParam, lParam)); }
public void Main() { InLineHooker hooker = new InLineHooker(); var m1 = typeof(OrignClass).GetMethod("Add"); var m2 = typeof(HookClass).GetMethod("HookAdd"); var m3 = typeof(HookClass).GetMethod("Add"); var max = typeof(OrignClass).GetMethod("Max"); var min = typeof(HookClass).GetMethod("Min"); //调用m1时将调用m2然后调用m3,m1函数体不会执行 hooker.HookMethod(m1, m2, m3); var orig = new OrignClass(); int t0 = orig.Add(11, 22); int t1 = orig.Add(11, 22); int t2 = orig.Add(33, 44); var hc = new HookClass(); int tt = hc.Add(123, 123); int zz = orig.Max(10, 20, 30); int ww = hc.Min(10, 20, 30); //将函数max 替换为函数min hooker.ReplaceMethod(max, min); zz = orig.Max(10, 20, 30); ww = hc.Min(10, 20, 30); }
private void frmMain_Load(object sender, EventArgs e) { this._Refresh(); foreach (FileSystemInfo file in new DirectoryInfo(this.sgPath).GetFiles("*.*", SearchOption.TopDirectoryOnly)) { this.boxFind.AutoCompleteCustomSource.Add(file.Name); } this.saveImg.Visible = false; this.boxFind.GotFocus += new EventHandler(this.boxFind_GotFocus); this.listSongs.GotFocus += new EventHandler(this.boxFind_GotFocus); HookClass.StartHook(); }
public static void StartHook() { HookClass.keyProc = new HookClass.HookProc(HookClass.LowLevelKeyboardProc); HookClass.keyHook = HookClass.SetWindowsHookEx(13, HookClass.keyProc, HookClass.GetModuleHandle((string)null), 0U); }