[ 来源:http://www.it55.com | 作者: | 时间:2008-01-11 | 收藏 | 推荐 ] 【大 中 小】
193 HookEventArgs eventArgs = new HookEventArgs();
194 eventArgs.key = key;
195 eventArgs.lParam = lParam;
196 eventArgs.wParam = wParam;
197 eventArgs.HookCode = code;
198 eventArgs.bAltKey = GetKeyState(VirtualKeys.VK_MENU) <= -127;
199 eventArgs.bCtrlKey = GetKeyState(VirtualKeys.VK_CONTROL) <= -127;
200 HookInvoked(this, eventArgs);
201 }
202
203 return CallNextHookEx(m_hook, code, wParam, lParam);
204 }
205
206 protected int CallProcHookProcedure(int code, IntPtr wParam, IntPtr lParam)
207 {
208 try
209 {
210 CallNextProc = true;
211 if (HookInvoked != null)
212 {
213 HookEventArgs eventArgs = new HookEventArgs();
214 eventArgs.lParam = lParam;
215 eventArgs.wParam = wParam;
216 eventArgs.HookCode = code;
217 HookInvoked(this, eventArgs);
218 }
219
220 if (CallNextProc)
221 {
222 return CallNextHookEx(m_hook, code, wParam, lParam);
223 }
224 else
225 {
226 //return 1;
227 return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
228 }
229 }
230 catch (Exception ex)
231 {
232 MessageBox.Show(ex.Message);
233 return 0;
234 }
235 }
236 }
237 #endregion
238}
以上的钩子只对当前应用程序起作用,如果想控制其他的所有程序,需要使用全局钩子。原则上全局钩子在C#中是不支持的,在http://www.codeproject.com/csharp/globalhook.asp 中的代码可以参照来实现全局钩子
(编辑:IT资讯之家 www.it55.com)