IIRC is "if I recall correctly". :) When you pass a delegate instance in for the lpfn parameter of SetWindowsHookEx, make that delegate be a field in your class so that it doesn't get disposed; as I recall, since the object is being passed into a native method, then never used again, the garbage collector cleans up the delegate, causing your hook to fail. So one thing to check is make sure the delegate you pass into SetWindowsHookEx stays alive. Windows may have some mechanism so that if the process eating the keyboard is not responding (i.e. busy do to lots of work) it may send out the key events to other processes. Can you make your work occur on another thread, thus keeping the hook procedure thread free? That'd be ideal.
Tech, life, family, faith: Give me a visit. I'm currently blogging about: God-as-Judge, God-as-Forgiver The apostle Paul, modernly speaking: Epistles of Paul Judah Himango