Пример #1
0
        private GlobalHook.CppGetMessageCallback GetCallback()
        {
            GlobalHook.CppGetMessageCallback callback = null;

            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_CLIPBOARDUPDATE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_PASTE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_CUT);

            hookNativeMethods.AllowLibraryLoad();
            var callbackReceivedEvent = new AutoResetEvent(false);

            hookNativeMethods.Mock
            .Setup(
                hook => hook.SetHook(It.IsAny <GlobalHook.CppGetMessageCallback>(), It.IsAny <bool>()))?
            .Callback((GlobalHook.CppGetMessageCallback cppCallback, bool isBlocking) =>
            {
                callback = cppCallback;
                callbackReceivedEvent.Set();
            });
            //here the SetHook() method is called!
            clipboardModule.Initialize(true);
            clipboardPasteEventProducer.StartCapture(nativeClipboard.Mock.Object);

            //wait for the hookNativeMethodsMock.Mock.Callback is called!
            Assert.IsTrue(callbackReceivedEvent.WaitOne(MaxWaitTime), "Did not receive callback in time!");
            callbackReceivedEvent.Dispose();
            Assert.IsNotNull(callback, "Callback received however unexpectedly null!");
            return(callback);
        }
Пример #2
0
        private GlobalHook.CppGetMessageCallback GetCallback()
        {
            GlobalHook.CppGetMessageCallback callback = null;
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_ENTERSIZEMOVE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_EXITSIZEMOVE);


            hookNativeMethods.AllowLibraryLoad();
            var callbackReceivedEvent = new AutoResetEvent(false);

            hookNativeMethods.Mock
            .Setup(
                hook => hook.SetHook(It.IsAny <GlobalHook.CppGetMessageCallback>(), It.IsAny <bool>()))?
            .Callback((GlobalHook.CppGetMessageCallback cppCallback, bool isBlocking) =>
            {
                callback = cppCallback;
                callbackReceivedEvent.Set();
            });

            //here the SetHook() method is called!
            windowManagementModule.Initialize(true);
            windowResizingEventProducer.StartCapture(nativeWindowManagement.Mock.Object);
            windowMovementEventProducer.Close();
            windowStateChangedEventProducer.Close();
            ;

            //wait for the hookNativeMethodsMock.Mock.Callback is called!
            Assert.IsTrue(callbackReceivedEvent.WaitOne(MaxWaitTime), "Did not receive callback in time!");
            callbackReceivedEvent.Dispose();
            Assert.IsNotNull(callback, "Callback received however unexpectedly null!");
            return(callback);
        }
Пример #3
0
        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));
        }
Пример #4
0
 /// <summary>
 ///     Call AllowMessageTypeRegistry() methods on all messages related to the mouse producers.
 /// </summary>
 private void AllowMessageTypeRegistryForAll()
 {
     foreach (GlobalHook.MessageType messageType in mouseClickListenedMessagesTypes)
     {
         hookNativeMethodsMock.AllowMessageTypeRegistry(messageType);
     }
     foreach (GlobalHook.MessageType messageType in mouseScrollListenedMessagesTypes)
     {
         hookNativeMethodsMock.AllowMessageTypeRegistry(messageType);
     }
 }
Пример #5
0
        public void ClipboardCopyEventProducerWinMessageSinkTest()
        {
            /* PRECONDITIONS */
            Debug.Assert(clipboardModule != null);
            Debug.Assert(clipboardCopyEventProducer != null);
            Debug.Assert(hookNativeMethods != null);
            Debug.Assert(nativeClipboard != null);
            Debug.Assert(clipWinMsgSinkMock != null);
            Debug.Assert(clipWinMsgSinkMock.Mock != null);
            /* GIVEN */
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_CLIPBOARDUPDATE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_PASTE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_CUT);

            hookNativeMethods.AllowLibraryLoad();

            clipWinMsgSinkMock.Dispose();
            nativeClipboard.GetText();

            clipboardModule.Initialize(true);
            clipboardCopyEventProducer.StartCapture(clipWinMsgSinkMock.Mock.Object, nativeClipboard.Mock.Object);


            using var consumedEvent = new CountdownEvent(1);

            using var didStartConsumingEvent = new ManualResetEvent(false);

            var thread = new Thread(async() =>
            {
                await foreach (var @event in Await(
                                   clipboardCopyEventProducer.GetEvents(), didStartConsumingEvent))
                {
                    if ([email protected]("ClipboardText"))
                    {
                        continue;
                    }

                    consumedEvent.Signal();
                }
            });

            thread.Start();

            Assert.IsTrue(didStartConsumingEvent.WaitOne(MaxWaitTime));
            clipWinMsgSinkMock.ClipboardUpdateCopy();

            /* THEN */
            Assert.IsTrue(consumedEvent.Wait(MaxWaitTime), "Did not find all matching clipboard copy event in time.");
            clipboardCopyEventProducer.StopCapture();
            clipboardModule.Initialize(false);
        }
Пример #6
0
 /// <summary>
 ///     Call AllowMessageTypeRegistry() methods on all messages related to keyboard producers.
 /// </summary>
 private void AllowMessageTypeRegistryForAll()
 {
     foreach (GlobalHook.MessageType messageType in KeyboardInteractListenedMessagesTypes)
     {
         hookNativeMethodsMock.AllowMessageTypeRegistry(messageType);
     }
 }
Пример #7
0
        public void TestWindowManagementModule_Activate()
        {
            /* PRECONDITIONS */
            Debug.Assert(windowManagementModule != null);
            Debug.Assert(windowFocusEventProducer != null);
            Debug.Assert(windowMovementEventProducer != null);
            Debug.Assert(windowResizingEventProducer != null);
            Debug.Assert(windowStateChangedEventProducer != null);
            Debug.Assert(hookNativeMethods != null);

            /* GIVEN */

            /* WHEN */
            windowManagementModule.Initialize(true);
            foreach (var messageType in windowEventListenedMessagesTypes)
            {
                hookNativeMethods.AllowMessageTypeRegistry(messageType);
            }

            hookNativeMethods.AllowLibraryLoad();
            windowManagementModule.IsActive = true;

            /* THEN */
            Assert.IsTrue(windowManagementModule.IsActive);
            windowManagementModule.IsActive = false;
        }
Пример #8
0
        public void TestClipboardModule_Activate()
        {
            /* PRECONDITIONS */
            Debug.Assert(clipboardModule != null);
            Debug.Assert(clipboardCopyEventProducer != null);
            Debug.Assert(clipboardCutEventProducer != null);
            Debug.Assert(clipboardPasteEventProducer != null);
            Debug.Assert(hookNativeMethods != null);

            /* GIVEN */

            /* WHEN */
            clipboardModule.Initialize(true);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_CLIPBOARDUPDATE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_PASTE);
            hookNativeMethods.AllowMessageTypeRegistry(GlobalHook.MessageType.WM_CUT);
            hookNativeMethods.AllowLibraryLoad();
            clipboardModule.IsActive = true;

            /* THEN */
            Assert.IsTrue(clipboardModule.IsActive);
            clipboardModule.IsActive = false;
        }