Esempio n. 1
0
        private void HandleKeyUp(PipeMessageEx msg)
        {
            if (msg.wParam > MAX_KEYS)
            {
                Log.Error($"{nameof(KeyHandler)}.{nameof(HandleKeyUp)} wParam > MAX_KEYS (wParam: " + msg.wParam + ")");
                return;
            }

            var pre = Keystate[msg.wParam];

            Keystate[msg.wParam] = false;

            //if (pre != false)
            //	Trace.WriteLine($"keyup: {msg.wParam} {msg.lParam} ({msg.lParam:x}) \"{Convert.ToString(msg.lParam, 2)}\"");

            if (pre != false)
            {
                AbortTimer();

                foreach (var l in _onKeyChangeListeners)
                {
                    l.Item2(msg.wParam, false);
                }
            }
        }
Esempio n. 2
0
        public void HandleMessage(PipeMessageEx msg)
        {
            if (msg.msg == signal.WMC_SETFOCUS)
            {
                if (msg.wParam > 0)
                {
                    var hwnd = new IntPtr((long)msg.wParam);
                    SignalAllListenersExcept(false, hwnd);
                    SignalListeners(hwnd, true);
                }
            }
            else if (msg.msg == signal.WMC_ACTIVATEAPP)
            {
                // If the current hwnd is the one receiving focus
                if (msg.lParam != 0)
                {
                    var hwnd = new IntPtr((long)msg.wParam);
                    var node = windowTracker.GetNodes(hwnd);

                    // And if we got a node handler for this window
                    if (node != null)
                    {
                        SignalAllListenersExcept(false, hwnd);
                        SignalListeners(hwnd, true);
                    }
                }
            }
        }
Esempio n. 3
0
        private void HandleKeyDown(PipeMessageEx msg)
        {
            if (msg.wParam > MAX_KEYS)
            {
                Log.Warning("HandleKeyDown - wParam > MAX_KEYS (wParam: " + msg.wParam + ")");
                //Trace.WriteLine("HandleKeyDown - wParam > MAX_KEYS (wParam: " + msg.wParam + ")");
                return;
            }

            var pre = Keystate[msg.wParam];

            Keystate[msg.wParam] = true;


            if (pre != true)
            {
                AbortTimer();

                foreach (var l in _onKeyChangeListeners)
                {
                    l.Item2(msg.wParam, true);
                }

                //var tmp = keyListener.Keystate.Select((keyVal, keyIndex) => new { key = keyVal, index = keyIndex }).Where(k => k.key).Select(k => k.index).ToList();
                //Trace.WriteLine($"Keydown: {msg.wParam} {msg.lParam} ({msg.lParam:x}) \"{Convert.ToString(msg.lParam, 2)}\" Pressed keys: {string.Join(", ", tmp)}");
                if (HandleKeyHits())
                {
                    StartTimer();
                }
            }
        }
Esempio n. 4
0
 public void HandleMessage(PipeMessageEx msg)
 {
     if (msg.msg == signal.WMC_KEYDOWN)
     {
         HandleKeyDown(msg);
     }
     else if (msg.msg == signal.WMC_KEYUP)
     {
         HandleKeyUp(msg);
     }
 }
Esempio n. 5
0
        public void HandleMessage(PipeMessageEx msg)
        {
            if (msg.msg == signalHandler.WMC_SCMINIMIZE ||
                msg.msg == signalHandler.WMC_SCMAXIMIZE)
            {
                var type = msg.msg == signalHandler.WMC_SCMAXIMIZE ? WindowStyleChangedType.Maximize : WindowStyleChangedType.Minimize;
                var hwnd = new IntPtr((long)msg.wParam);
                foreach (var l in _styleChangedListeners)
                {
                    if (l.Value.Item1 == hwnd)
                    {
                        l.Value.Item2(new WindowStyleChangedArg(type, 0));
                    }
                }
            }
            else if (msg.msg == signalHandler.WMC_STYLECHANGED)
            {
                // NOTE, this messages lParam should be an pointer
                // to an STYLESTRUCT object... how to fix so we can
                // read this object in here???
                var hwnd = new IntPtr((long)msg.wParam);
                var hit  = false;

                foreach (var l in _styleChangedListeners)
                {
                    if (l.Value.Item1 == hwnd)
                    {
                        hit = true;
                        l.Value.Item2(new WindowStyleChangedArg(WindowStyleChangedType.Style, msg.lParam));
                    }
                }

                if (!hit)
                {
                    UnknownWindow?.Invoke(this, Tuple.Create(hwnd, msg.lParam));
                }
            }
            else if (msg.msg == signalHandler.WMC_DESTROY)
            {
                var hwnd = new IntPtr((long)msg.wParam);
                foreach (var l in _closeListeners)
                {
                    if (l.Value.Item1 == hwnd)
                    {
                        l.Value.Item2(hwnd);
                    }
                }
            }
        }
Esempio n. 6
0
 public void HandleMessage(PipeMessageEx msg)
 {
     if (msg.msg == signalHandler.WMC_ENTERMOVE)
     {
         RaiseOnDragStart(new DragStartEvent(msg));
     }
     else if (msg.msg == signalHandler.WMC_MOVE)
     {
         RaiseOnDragMove(new DragMoveEvent(msg));
     }
     else if (msg.msg == signalHandler.WMC_EXITMOVE)
     {
         RaiseOnDragEnd(new DragEndEvent(msg));
     }
 }
Esempio n. 7
0
        public void When_DisplayChange_Then_CallScreenChanged()
        {
            // Arrange
            uint signalId = 666;

            (var screens, var screenList)  = SetupScreens(1);
            (var collection, var desktops) = SetupDeskops(1);
            var sut = CreateSut(screens: screens, desktopCollection: collection, signal: out Mock <ISignalHandler> signal);
            var msg = new PipeMessageEx {
                msg = signalId
            };

            signal.SetupGet(m => m.WMC_DISPLAYCHANGE).Returns(signalId);
            screenList[0].SetupGet(m => m.WorkingArea).Returns(new RECT(0, 0, 20, 20));
            var expected = screens.Object.AllScreens.GetOrderRect().rect.ToArray();

            // Act
            sut.HandleMessage(msg);

            // Assert
            desktops[0].Verify(m => m.ScreensChanged(expected, It.IsAny <Direction>()));
        }
Esempio n. 8
0
        public void When_DisplayChange_Then_SignalRestartThread()
        {
            // Arrange
            uint signalId = 666;

            (var screens, var screenList)  = SetupScreens(1);
            (var collection, var desktops) = SetupDeskops(1);
            var sut = CreateSut(screens: screens, desktopCollection: collection, signal: out Mock <ISignalHandler> signal);
            var msg = new PipeMessageEx {
                msg = signalId
            };
            var restartThreadsCalled = false;

            signal.SetupGet(m => m.WMC_DISPLAYCHANGE).Returns(signalId);
            screenList[0].SetupGet(m => m.WorkingArea).Returns(new RECT(0, 0, 20, 20));
            Startup.ParserSignal.RestartThreads += (sender, args) => restartThreadsCalled = true;

            // Act
            sut.HandleMessage(msg);

            // Assert
            restartThreadsCalled.Should().BeTrue();
        }
Esempio n. 9
0
 public DragEndEvent(PipeMessageEx msg)
 {
     hWnd = new IntPtr((long)msg.wParam);
 }
Esempio n. 10
0
 public DragMoveEvent(PipeMessageEx msg)
 {
     X    = ToSignedDWord(msg.lParam);
     Y    = ToSignedDWord(msg.lParam >> 16);
     hWnd = new IntPtr((long)msg.wParam);
 }