int INativeKeyboard.CallNextHookEx(IntPtr hhk, int nCode, GlobalHook.MessageType wParam, [In] INativeKeyboard.KBDLLHOOKSTRUCT lParam) { return(CallNextHookEx(hhk, nCode, wParam, lParam)); }
public void TestGlobalHook_AddListener() { /* PRECONDITIONS */ Debug.Assert(hookNativeMethods != null); Debug.Assert(hookNativeMethods.Mock != null); /* GIVEN */ const int numOfEvent = 50; const int numOfNotEvent = 20; const GlobalHook.MessageType messageType = GlobalHook.MessageType.WM_USER; using var resetCounter = new CountdownEvent(numOfEvent); using var autoReset = new AutoResetEvent(false); GlobalHook.CppGetMessageCallback callback = null; hookNativeMethods.AllowMessageTypeRegistry(messageType); hookNativeMethods.AllowLibraryLoad(); hookNativeMethods.Mock .Setup(hook => hook.SetHook(It.IsAny <GlobalHook.CppGetMessageCallback>(), It.IsAny <bool>()))? .Callback((GlobalHook.CppGetMessageCallback cppCallback, bool isBlocking) => { callback = cppCallback; autoReset.Set(); }); /* WHEN */ GlobalHook.AddListener(message => { Assert.AreEqual((uint)messageType, message.Type); resetCounter.Signal(); }, messageType); GlobalHook.IsActive = true; Assert.IsTrue(autoReset.WaitOne(maxWaitTime)); Assert.IsNotNull(callback); for (var index = 0; index < numOfEvent; index++) { callback(new GlobalHook.HookMessage() { Type = (uint)messageType }); } // We check if our listener still gets called on events we don't care about. If it will this // test will throw because the resetCounter will be set to a negative number. for (var index = 0; index < numOfNotEvent; index++) { callback(new GlobalHook.HookMessage() { Type = (uint)GlobalHook.MessageType.WM_APP }); } /* THEN */ Assert.IsTrue(resetCounter.Wait(maxWaitTime)); }
public void TestGlobalHook_AddListener_UnsupportedMessageType() { /* PRECONDITIONS */ Debug.Assert(hookNativeMethods != null); Debug.Assert(hookNativeMethods.Mock != null); /* GIVEN */ const GlobalHook.MessageType messageType = GlobalHook.MessageType.WM_USER; hookNativeMethods.DisallowMessageTypeRegistry(messageType); /* WHEN */ Assert.ThrowsException <NotSupportedException>(() => GlobalHook.AddListener(message => { }, messageType)); /* THEN */ hookNativeMethods.Mock.Verify(hook => hook.SetHook(It.IsAny <GlobalHook.CppGetMessageCallback>(), It.IsAny <bool>()), Times.Never); }
private MouseAction GetMouseAction(GlobalHook.MessageType messageType) { return(messageType switch { GlobalHook.MessageType.WM_RBUTTONDOWN => MouseAction.RightClick, GlobalHook.MessageType.WM_NCRBUTTONDOWN => MouseAction.RightClick, GlobalHook.MessageType.WM_LBUTTONDOWN => MouseAction.LeftClick, GlobalHook.MessageType.WM_NCLBUTTONDOWN => MouseAction.LeftClick, GlobalHook.MessageType.WM_MBUTTONDOWN => MouseAction.MiddleClick, GlobalHook.MessageType.WM_NCMBUTTONDOWN => MouseAction.MiddleClick, GlobalHook.MessageType.WM_RBUTTONDBLCLK => MouseAction.RightDoubleClick, GlobalHook.MessageType.WM_NCRBUTTONDBLCLK => MouseAction.RightDoubleClick, GlobalHook.MessageType.WM_LBUTTONDBLCLK => MouseAction.LeftDoubleClick, GlobalHook.MessageType.WM_NCLBUTTONDBLCLK => MouseAction.LeftDoubleClick, GlobalHook.MessageType.WM_MBUTTONDBLCLK => MouseAction.MiddleDoubleClick, GlobalHook.MessageType.WM_NCMBUTTONDBLCLK => MouseAction.MiddleDoubleClick, _ => MouseAction.None });
public void TestGlobalHook_RemoveListener() { /* PRECONDITIONS */ Debug.Assert(hookNativeMethods != null); Debug.Assert(hookNativeMethods.Mock != null); /* GIVEN */ const GlobalHook.MessageType messageType = GlobalHook.MessageType.WM_USER; using var autoReset = new AutoResetEvent(false); GlobalHook.CppGetMessageCallback callback = null; hookNativeMethods.AllowMessageTypeRegistry(messageType); hookNativeMethods.AllowLibraryLoad(); hookNativeMethods.Mock .Setup(hook => hook.SetHook(It.IsAny <GlobalHook.CppGetMessageCallback>(), It.IsAny <bool>()))? .Callback((GlobalHook.CppGetMessageCallback cppCallback, bool isBlocking) => { callback = cppCallback; autoReset.Set(); });
public void DisallowMessageTypeRegistry(GlobalHook.MessageType messageType) { Mock? .Setup(hook => hook.Capture((uint)messageType))? .Returns(false); }
private static extern int CallNextHookEx(IntPtr hhk, int nCode, GlobalHook.MessageType wParam, [In] INativeKeyboard.KBDLLHOOKSTRUCT lParam);