C#钩子设置不成功的问题
我的应用程序的主窗体中包含了一个自定义控件,自定义控件相当于一个窗体容器,现在,我将windowWord窗体嵌套在这个自定义控件中,我想给windowWord窗体设置一个钩子用于获取这个窗体的鼠标键盘消息!注意,windowWord就是独立的一个MircsoftWord窗体,激活此窗体后,该窗体的进程ID与进程句柄应该都已经获取正确!
下面是我设置钩子的代码:
public void HookStart() { int wordCalcID = 0; int wordCalcProcess = 0; const int PROCESS_ALL_ACCESS = 0x1F0FFF; const int PROCESS_VM_READ = 0x0010; const int PROCESS_VM_WRITE = 0x0020; if(wordWnd!= null) { GetWindowThreadProcessId((System.IntPtr)wordWnd, out wordCalcID); wordCalcProcess = OpenProcess(PROCESS_ALL_ACCESS, false, wordCalcID); } else { MessageBox.Show("Not Found WordWindow"); } if (hKeyboardHook == 0) { // 创建HookProc实例 KeyboardHookProcedure = new HookProc(KeyAndMouseHookProc); // 设置线程钩子 if (wordCalcProcess !=0) { hKeyboardHook = SetWindowsHookEx(7, KeyboardHookProcedure,(System.IntPtr)wordCalcProcess, 0); // 如果设置钩子失败 if (hKeyboardHook == 0) { HookStop(); throw new Exception("SetWindowsHookEx failed."); } } else if (wordCalcProcess==0) { MessageBox.Show("ThreadId found error"); } } }