Exemplo n.º 1
0
        //--------------------------------------------------------------------------------------------------

        #endregion

        #region Keyboard Input

        static bool _SendKeyEvent(int key, bool isUp)
        {
            bool success = false;
            int  vkey    = key & 0xff;

            Application.Current.Dispatcher.Invoke(() =>
            {
                var sourceElement = Keyboard.PrimaryDevice.ActiveSource;
                var focusElement  = Keyboard.PrimaryDevice.FocusedElement;
                if (focusElement == null || sourceElement == null)
                {
                    return;
                }

                var tunnelArgs         = new KeyEventArgs(Keyboard.PrimaryDevice, sourceElement, 0, KeyInterop.KeyFromVirtualKey(vkey));
                tunnelArgs.RoutedEvent = isUp ? Keyboard.PreviewKeyUpEvent : Keyboard.PreviewKeyDownEvent;
                focusElement.RaiseEvent(tunnelArgs);

                if (!tunnelArgs.Handled)
                {
                    var bubbleArgs         = new KeyEventArgs(Keyboard.PrimaryDevice, sourceElement, 0, KeyInterop.KeyFromVirtualKey(vkey));
                    bubbleArgs.RoutedEvent = isUp ? Keyboard.KeyUpEvent : Keyboard.KeyDownEvent;
                    focusElement.RaiseEvent(bubbleArgs);

                    if (!bubbleArgs.Handled && !isUp)
                    {
                        var sb           = new StringBuilder();
                        byte[] bKeyState = new byte[255];
                        if ((key & 0x0100) > 0)
                        {
                            bKeyState[0x10] = 0x80;
                        }
                        if ((key & 0x0200) > 0)
                        {
                            bKeyState[0x11] = 0x80;
                        }
                        if ((key & 0x0400) > 0)
                        {
                            bKeyState[0x12] = 0x80;
                        }
                        uint lScanCode = Win32Api.MapVirtualKey((uint)(vkey), Win32Api.MapVirtualKeyMapTypes.MAPVK_VK_TO_VSC);
                        Win32Api.ToUnicode((uint)(vkey), lScanCode, bKeyState, sb, 5, 0);

                        TextCompositionManager.StartComposition(new TextComposition(InputManager.Current, Keyboard.FocusedElement, sb.ToString()));
                    }
                }

                success = true;
            });
            return(success);
        }
Exemplo n.º 2
0
        protected virtual IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
        {
            bool unicode = UnmanagedMethods.IsWindowUnicode(hWnd);

            const double wheelDelta = 120.0;
            uint         timestamp  = unchecked ((uint)UnmanagedMethods.GetMessageTime());

            RawInputEventArgs e = null;

            WindowsMouseDevice.Instance.CurrentWindow = this;

            switch ((UnmanagedMethods.WindowsMessage)msg)
            {
            case UnmanagedMethods.WindowsMessage.WM_ACTIVATE:
                var wa = (UnmanagedMethods.WindowActivate)(ToInt32(wParam) & 0xffff);

                switch (wa)
                {
                case UnmanagedMethods.WindowActivate.WA_ACTIVE:
                case UnmanagedMethods.WindowActivate.WA_CLICKACTIVE:
                    Activated?.Invoke();
                    break;

                case UnmanagedMethods.WindowActivate.WA_INACTIVE:
                    Deactivated?.Invoke();
                    break;
                }

                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_DESTROY:
                //Window doesn't exist anymore
                _hwnd = IntPtr.Zero;
                //Remove root reference to this class, so unmanaged delegate can be collected
                s_instances.Remove(this);
                Closed?.Invoke();
                //Free other resources
                Dispose();
                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_DPICHANGED:
                var dpi            = ToInt32(wParam) & 0xffff;
                var newDisplayRect = (UnmanagedMethods.RECT)Marshal.PtrToStructure(lParam, typeof(UnmanagedMethods.RECT));
                Position = new Point(newDisplayRect.left, newDisplayRect.top);
                _scaling = dpi / 96.0;
                ScalingChanged?.Invoke(_scaling);
                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_KEYDOWN:
            case UnmanagedMethods.WindowsMessage.WM_SYSKEYDOWN:
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    RawKeyEventType.KeyDown,
                    KeyInterop.KeyFromVirtualKey(ToInt32(wParam)), WindowsKeyboardDevice.Instance.Modifiers);
                break;

            case UnmanagedMethods.WindowsMessage.WM_KEYUP:
            case UnmanagedMethods.WindowsMessage.WM_SYSKEYUP:
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    RawKeyEventType.KeyUp,
                    KeyInterop.KeyFromVirtualKey(ToInt32(wParam)), WindowsKeyboardDevice.Instance.Modifiers);
                break;

            case UnmanagedMethods.WindowsMessage.WM_CHAR:
                // Ignore control chars
                if (ToInt32(wParam) >= 32)
                {
                    e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp,
                                                  new string((char)ToInt32(wParam), 1));
                }

                break;

            case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_MBUTTONDOWN:
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    msg == (int)UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN
                            ? RawMouseEventType.LeftButtonDown
                            : msg == (int)UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN
                                ? RawMouseEventType.RightButtonDown
                                : RawMouseEventType.MiddleButtonDown,
                    DipFromLParam(lParam), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_LBUTTONUP:
            case UnmanagedMethods.WindowsMessage.WM_RBUTTONUP:
            case UnmanagedMethods.WindowsMessage.WM_MBUTTONUP:
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    msg == (int)UnmanagedMethods.WindowsMessage.WM_LBUTTONUP
                            ? RawMouseEventType.LeftButtonUp
                            : msg == (int)UnmanagedMethods.WindowsMessage.WM_RBUTTONUP
                                ? RawMouseEventType.RightButtonUp
                                : RawMouseEventType.MiddleButtonUp,
                    DipFromLParam(lParam), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSEMOVE:
                if (!_trackingMouse)
                {
                    var tm = new UnmanagedMethods.TRACKMOUSEEVENT
                    {
                        cbSize      = Marshal.SizeOf(typeof(UnmanagedMethods.TRACKMOUSEEVENT)),
                        dwFlags     = 2,
                        hwndTrack   = _hwnd,
                        dwHoverTime = 0,
                    };

                    UnmanagedMethods.TrackMouseEvent(ref tm);
                }

                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    RawMouseEventType.Move,
                    DipFromLParam(lParam), GetMouseModifiers(wParam));

                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSEWHEEL:
                e = new RawMouseWheelEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    ScreenToClient(DipFromLParam(lParam)),
                    new Vector(0, (ToInt32(wParam) >> 16) / wheelDelta), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSEHWHEEL:
                e = new RawMouseWheelEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    ScreenToClient(DipFromLParam(lParam)),
                    new Vector(-(ToInt32(wParam) >> 16) / wheelDelta, 0), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE:
                _trackingMouse = false;
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    RawMouseEventType.LeaveWindow,
                    new Point(), WindowsKeyboardDevice.Instance.Modifiers);
                break;

            case UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_NCMBUTTONDOWN:
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    msg == (int)UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN
                            ? RawMouseEventType.NonClientLeftButtonDown
                            : msg == (int)UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN
                                ? RawMouseEventType.RightButtonDown
                                : RawMouseEventType.MiddleButtonDown,
                    new Point(0, 0), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_PAINT:
                UnmanagedMethods.PAINTSTRUCT ps;

                if (UnmanagedMethods.BeginPaint(_hwnd, out ps) != IntPtr.Zero)
                {
                    var f = Scaling;
                    var r = ps.rcPaint;
                    Paint?.Invoke(new Rect(r.left / f, r.top / f, (r.right - r.left) / f, (r.bottom - r.top) / f));
                    UnmanagedMethods.EndPaint(_hwnd, ref ps);
                }

                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_SIZE:
                if (Resized != null &&
                    (wParam == (IntPtr)UnmanagedMethods.SizeCommand.Restored ||
                     wParam == (IntPtr)UnmanagedMethods.SizeCommand.Maximized))
                {
                    var clientSize = new Size(ToInt32(lParam) & 0xffff, ToInt32(lParam) >> 16);
                    Resized(clientSize / Scaling);
                }

                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_MOVE:
                PositionChanged?.Invoke(new Point((short)(ToInt32(lParam) & 0xffff), (short)(ToInt32(lParam) >> 16)));
                return(IntPtr.Zero);
            }

            if (e != null && Input != null)
            {
                Input(e);

                if (e.Handled)
                {
                    return(IntPtr.Zero);
                }
            }

            return(UnmanagedMethods.DefWindowProc(hWnd, msg, wParam, lParam));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Registers a system-wide hot key.
        /// </summary>
        /// <param name="handle">The handle of the window that will process hot key messages.</param>
        /// <param name="id">The hot key ID.</param>
        /// <param name="key">The key.</param>
        /// <param name="modifiers">The key modifiers.</param>
        /// <returns><c>true</c> if hot key was registered; otherwise, <c>false</c>.</returns>
        public static bool RegisterHotKey(IntPtr handle, int id, Key key, ModifierKeys modifiers)
        {
            var virtualCode = KeyInterop.VirtualKeyFromKey(key);

            return(RegisterHotKey(handle, id, (uint)modifiers, (uint)virtualCode));
        }
Exemplo n.º 4
0
        private void MakeMenu(ActiveAbility activeAbility)
        {
            var             main   = _main.MenuWithTexture("", $"{activeAbility.Ability.Id}", $"{activeAbility.Ability.Id}");
            var             enable = main.Item("Enable", true);
            var             key    = main.Item("Invoke Key", new KeyBind('0'));
            var             ignore = main.Item("Ignore invisibility", false);
            MenuItem <bool> useOnMainHeroAfterInvoke = null;
            MenuItem <bool> use = null;

            if (activeAbility is InvokerAlacrity || activeAbility is InvokerForgeSpirit ||
                activeAbility is InvokerGhostWalk || activeAbility is InvokerIceWall)
            {
                useOnMainHeroAfterInvoke = main.Item("Use on main hero after Invoke", false);
                use = main.Item("Use if already invoked", false);
            }
            else if (activeAbility is InvokerTornado || activeAbility is InvokerChaosMeteor ||
                     activeAbility is InvokerDeafeningBlast || activeAbility is InvokerEmp ||
                     activeAbility is InvokerSunStrike || activeAbility is InvokerColdSnap)
            {
                useOnMainHeroAfterInvoke = main.Item("Use after Invoke", false);
                use = main.Item("Use if already invoked", false);
                if (activeAbility is InvokerSunStrike)
                {
                    delayForCataclysm = main.Item("time for double click for cataclysm", new Slider(0, 0, 100));
                }

//                if (activeAbility is InvokerSunStrike)
//                {
//                    useCataclysm = main.Item("Use cactaclysm", false);
//                }
            }

            var reInvoke = main.Item("Use invoke if skill in slot #5", false);

            ((IHaveFastInvokeKey)activeAbility).Key =
                key.Value.Key == '0' ? Key.None : KeyInterop.KeyFromVirtualKey((int)key.Value.Key);

            var value = key.Value.Active;

            isFirstClick         = true;
            key.PropertyChanged += async(sender, args) =>
            {
                if (!enable)
                {
                    return;
                }
                if (key)
                {
                    if (value)
                    {
                        return;
                    }
                    value = true;
                    if (_config.SmartSphere.InChanging.Sleeping)
                    {
                        while (_config.SmartSphere.InChanging.Sleeping)
                        {
                            await Task.Delay(5);
                        }
                    }

                    if (!_config.Main.Me.IsAlive || !_config.Main.Me.CanCastAbilities())
                    {
                        return;
                    }
                    if ( /*|| !activeAbility.CanBeCasted ||*/
                        _config.Main.Me.HasAnyModifiers(_config.Main.AbilitiesInCombo.GhostWalk.ModifierName,
                                                        "item_glimmer_cape") && !ignore)
                    {
                        return;
                    }
                    if (!ObjectManager.LocalPlayer.Selection.Any(x => x.Equals(_config.Main.Me)))
                    {
                        return;
                    }
                    var slot = activeAbility.Ability.AbilitySlot;
                    if (reInvoke && slot == AbilitySlot.Slot_5)
                    {
                        _config.Main.Combo.InvokeThisShit(activeAbility);
                        return;
                    }

                    if (slot == AbilitySlot.Slot_4 ||
                        slot == AbilitySlot.Slot_5)
                    {
                        if (use != null && use)
                        {
                            JustUse(activeAbility);
                        }

                        return;
                    }

                    if (!_config.Main.AbilitiesInCombo.Invoke.CanBeCasted)
                    {
                        return;
                    }
                    if (useOnMainHeroAfterInvoke == null)
                    {
                        InvokeThenCast(activeAbility);
                    }
                    else
                    {
                        InvokeThenCast(activeAbility, useOnMainHeroAfterInvoke);
                    }
                }
                else
                {
                    if (value)
                    {
                        value = false;
                    }
                    else
                    {
                        ((IHaveFastInvokeKey)activeAbility).Key = KeyInterop.KeyFromVirtualKey((int)key.Value.Key);
                        Console.WriteLine(
                            $"({activeAbility}) Changed: to {((IHaveFastInvokeKey) activeAbility).Key} ({key.Value.Key})");
                    }

                    //Console.WriteLine($"({activeAbility}) Changed: to {((IHaveFastInvokeKey)activeAbility).Key} ({key.Value.Key})");
                }
            };
        }
 /// <summary>
 /// 返回具有状态的键的状态
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public static bool GetState(Key key)
 {
     return(SoftKeyboardManager.GetKeyState(KeyInterop.VirtualKeyFromKey(key)) == 1);
 }
Exemplo n.º 6
0
 public void SetKey(Key key, string keyName)
 {
     this.Key        = key;
     this.KeyName    = keyName;
     this.VirtualKey = KeyInterop.VirtualKeyFromKey(this.Key);
 }
Exemplo n.º 7
0
        /// <summary>
        /// Get keyboard input for the console.
        /// </summary>
        /// <param name="e"></param>
        private void GetConsoleInput(KeyEventArgs e)
        {
            var keyChar = KeyInterop.GetCharFromKey(e.KeyCode, (e.Modifiers & Keys.Shift) != 0);

            var capsLock = System.Windows.Forms.Control.IsKeyLocked(Keys.CapsLock);

            if (char.IsLetter(keyChar))
            {
                if (capsLock || e.Shift)
                {
                    keyChar = char.ToUpper(keyChar);
                }
                else
                {
                    keyChar = char.ToLower(keyChar);
                }
            }

            else
            {
                switch (e.KeyCode)
                {
                case Keys.Back:
                    if (_input.GetText().Length < 1)
                    {
                        _input.Hide();
                        _output.Hide();
                        _output.EnableFadeOut();
                        _consoleActive = false;
                    }

                    _input.RemoveLastChar();

                    return;

                case Keys.Up:
                    _output.ScrollUp();
                    return;

                case Keys.Down:
                    _output.ScrollDown();
                    return;

                case Keys.Enter:
                    var text = _input.GetText();

                    _output.WriteLine(text);

                    _output.EnableFadeOut();

                    _input.Hide();

                    _input.Clear();

                    _consoleActive = false;

                    ExecuteCommandString(text);

                    return;
                }
            }

            _input.AddChar(keyChar);
        }
Exemplo n.º 8
0
        protected override void OnActivate()
        {
            Log.Debug("pre init");
            Mode = new InvokerMode(
                Key.G,
                OrbwalkerManager,
                Input,
                this);

            Quas                   = Owner.GetAbilityById(AbilityId.invoker_quas);
            Wex                    = Owner.GetAbilityById(AbilityId.invoker_wex);
            Exort                  = Owner.GetAbilityById(AbilityId.invoker_exort);
            BlockerSleeper         = new Sleeper();
            SunStrike              = new AbilityInfo(Exort, Exort, Exort, Owner.GetAbilityById(AbilityId.invoker_sun_strike));
            ColdSnap               = new AbilityInfo(Quas, Quas, Quas, Owner.GetAbilityById(AbilityId.invoker_cold_snap));
            Alacrity               = new AbilityInfo(Wex, Wex, Exort, Owner.GetAbilityById(AbilityId.invoker_alacrity));
            Meteor                 = new AbilityInfo(Exort, Exort, Wex, Owner.GetAbilityById(AbilityId.invoker_chaos_meteor));
            Blast                  = new AbilityInfo(Quas, Exort, Wex, Owner.GetAbilityById(AbilityId.invoker_deafening_blast));
            ForgeSpirit            = new AbilityInfo(Exort, Exort, Quas, Owner.GetAbilityById(AbilityId.invoker_forge_spirit));
            GhostWalk              = new AbilityInfo(Quas, Quas, Wex, Owner.GetAbilityById(AbilityId.invoker_ghost_walk));
            IceWall                = new AbilityInfo(Quas, Quas, Exort, Owner.GetAbilityById(AbilityId.invoker_ice_wall));
            Tornado                = new AbilityInfo(Wex, Wex, Quas, Owner.GetAbilityById(AbilityId.invoker_tornado));
            Emp                    = new AbilityInfo(Wex, Wex, Wex, Owner.GetAbilityById(AbilityId.invoker_emp));
            _invokeSleeper         = new Sleeper();
            GlobalGhostWalkSleeper = new Sleeper();
            AbilityInfos           = new List <AbilityInfo>
            {
                SunStrike,
                ColdSnap,
                Alacrity,
                Meteor,
                Blast,
                ForgeSpirit,
                GhostWalk,
                IceWall,
                Tornado,
                Emp
            };

            //retards re coming
            foreach (var ability in AbilityInfos)
            {
                ability.LoadInvoker(this);
            }


            Empty1        = Owner.GetAbilityById(AbilityId.invoker_empty1);
            Empty2        = Owner.GetAbilityById(AbilityId.invoker_empty2);
            InvokeAbility = Owner.GetAbilityById(AbilityId.invoker_invoke);
            Log.Debug("post init");
            Config = new Config(this);
            Log.Debug("new config");
            Config.ComboKey.Item.ValueChanged += HotkeyChanged;
            Log.Debug("event to config");
            OrbwalkerManager.Value.Activate();
            Log.Debug("activate OrbwalkerManager");
            TargetManager.Value.Activate();
            Log.Debug("activate TargetManager");
            Mode.UpdateConfig(Config);
            Log.Debug("load config");
            OrbwalkerManager.Value.RegisterMode(Mode);
            Log.Debug("RegisterMode");
            foreach (var valueOrbwalkingMode in OrbwalkerManager.Value.OrbwalkingModes)
            {
                Log.Warn($"Mode: {valueOrbwalkingMode.Value}");
            }
            foreach (var valueOrbwalkingMode in OrbwalkerManager.Value.CustomOrbwalkingModes)
            {
                Log.Warn($"Custom Mode: {valueOrbwalkingMode}");
            }
            Mode.Load();
            var key = KeyInterop.KeyFromVirtualKey((int)Config.ComboKey.Item.GetValue <KeyBind>().Key);

            Mode.Key = key;
            Log.Debug($"_mode loaded. Key for combo -> {Mode.Key}");
            InventoryManager.Value.Attach(this);
            Log.Debug("InventoryManager Attach");
            SelectedCombo = 0;
            InventoryManager.Value.CollectionChanged += ValueOnCollectionChanged;
            //if (InventoryManager.Value.Inventory.Items.Any(x => x.Id == AbilityId.item_cyclone))

            /*if (Eul!=null)
             * {
             *  _eulCombo1 = new Combo(this, new[]
             *  {
             *      new AbilityInfo(Eul.Ability), SunStrike, Meteor, Blast, ColdSnap, Alacrity, ForgeSpirit
             *  });
             *  _eulCombo2 = new Combo(this, new[]
             *  {
             *      new AbilityInfo(Eul.Ability), Meteor, Blast, ColdSnap, Alacrity, ForgeSpirit
             *  });
             *  _eulCombo3 = new Combo(this, new[]
             *  {
             *      new AbilityInfo(Eul.Ability), SunStrike, IceWall, ColdSnap, Alacrity, ForgeSpirit
             *  });
             *  Config.ComboPanel.Combos.Add(_eulCombo1);
             *  Config.ComboPanel.Combos.Add(_eulCombo2);
             *  Config.ComboPanel.Combos.Add(_eulCombo3);
             * }*/

            Unit.OnModifierAdded   += HeroOnOnModifierAdded;
            Unit.OnModifierRemoved += HeroOnOnModifierRemoved;
            SpCounter = new SphereCounter();
        }
Exemplo n.º 9
0
        /// <summary>
        /// 注册热键
        /// </summary>
        public void RegisterHotKey()
        {
            //重新进行注册
            if (IsKeyRegistered)
            {
                UnregisterHotKey();
            }
            IsKeyRegistered = NativeMethods.RegisterHotKey(IntPtr.Zero, _id, KeyModifier, KeyInterop.VirtualKeyFromKey(Key));


            //如果注册失败,说明热键已经被占用
            if (!IsKeyRegistered)
            {
#pragma warning disable CA1303 // 请不要将文本作为本地化参数传递
                throw new ApplicationException("Hotkey already in use");
#pragma warning restore CA1303 // 请不要将文本作为本地化参数传递
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Registers a window handle (HWND) that identifies as the main application window.
        /// </summary>
        /// <param name="handle">A <see cref="IntPtr" /> representing window handle (HWND).</param>
        public void RegisterWindow(IntPtr handle)
        {
            Check.ArgumentEx.Handle(handle, nameof(handle));

            if (Handle == IntPtr.Zero)
            {
                Handle = handle;
                if (!Native.RegisterHotKey(Handle, HotKeyId, Modifiers, (System.Windows.Forms.Keys)KeyInterop.VirtualKeyFromKey(Key)))
                {
                    throw Throw.Win32("Hotkey already in use.");
                }
                ComponentDispatcher.ThreadPreprocessMessage += ComponentDispatcher_ThreadPreprocessMessage;
            }
            else
            {
                throw Throw.InvalidOperation("Window was already registered.");
            }
        }
Exemplo n.º 11
0
        protected virtual unsafe IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
        {
            const double wheelDelta = 120.0;
            uint         timestamp  = unchecked ((uint)GetMessageTime());

            RawInputEventArgs e = null;

            switch ((WindowsMessage)msg)
            {
            case WindowsMessage.WM_ACTIVATE:
            {
                var wa = (WindowActivate)(ToInt32(wParam) & 0xffff);

                switch (wa)
                {
                case WindowActivate.WA_ACTIVE:
                case WindowActivate.WA_CLICKACTIVE:
                {
                    Activated?.Invoke();
                    break;
                }

                case WindowActivate.WA_INACTIVE:
                {
                    Deactivated?.Invoke();
                    break;
                }
                }

                return(IntPtr.Zero);
            }

            case WindowsMessage.WM_NCCALCSIZE:
            {
                if (ToInt32(wParam) == 1 && !HasFullDecorations)
                {
                    return(IntPtr.Zero);
                }

                break;
            }

            case WindowsMessage.WM_CLOSE:
            {
                bool?preventClosing = Closing?.Invoke();
                if (preventClosing == true)
                {
                    return(IntPtr.Zero);
                }

                break;
            }

            case WindowsMessage.WM_DESTROY:
            {
                //Window doesn't exist anymore
                _hwnd = IntPtr.Zero;
                //Remove root reference to this class, so unmanaged delegate can be collected
                s_instances.Remove(this);
                Closed?.Invoke();

                _mouseDevice.Dispose();
                _touchDevice?.Dispose();
                //Free other resources
                Dispose();
                return(IntPtr.Zero);
            }

            case WindowsMessage.WM_DPICHANGED:
            {
                var dpi            = ToInt32(wParam) & 0xffff;
                var newDisplayRect = Marshal.PtrToStructure <RECT>(lParam);
                _scaling = dpi / 96.0;
                ScalingChanged?.Invoke(_scaling);
                SetWindowPos(hWnd,
                             IntPtr.Zero,
                             newDisplayRect.left,
                             newDisplayRect.top,
                             newDisplayRect.right - newDisplayRect.left,
                             newDisplayRect.bottom - newDisplayRect.top,
                             SetWindowPosFlags.SWP_NOZORDER |
                             SetWindowPosFlags.SWP_NOACTIVATE);
                return(IntPtr.Zero);
            }

            case WindowsMessage.WM_KEYDOWN:
            case WindowsMessage.WM_SYSKEYDOWN:
            {
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    _owner,
                    RawKeyEventType.KeyDown,
                    KeyInterop.KeyFromVirtualKey(ToInt32(wParam), ToInt32(lParam)),
                    WindowsKeyboardDevice.Instance.Modifiers);
                break;
            }

            case WindowsMessage.WM_MENUCHAR:
            {
                // mute the system beep
                return((IntPtr)((int)MenuCharParam.MNC_CLOSE << 16));
            }

            case WindowsMessage.WM_KEYUP:
            case WindowsMessage.WM_SYSKEYUP:
            {
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    _owner,
                    RawKeyEventType.KeyUp,
                    KeyInterop.KeyFromVirtualKey(ToInt32(wParam), ToInt32(lParam)),
                    WindowsKeyboardDevice.Instance.Modifiers);
                break;
            }

            case WindowsMessage.WM_CHAR:
            {
                // Ignore control chars
                if (ToInt32(wParam) >= 32)
                {
                    e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, _owner,
                                                  new string((char)ToInt32(wParam), 1));
                }

                break;
            }

            case WindowsMessage.WM_LBUTTONDOWN:
            case WindowsMessage.WM_RBUTTONDOWN:
            case WindowsMessage.WM_MBUTTONDOWN:
            case WindowsMessage.WM_XBUTTONDOWN:
            {
                if (ShouldIgnoreTouchEmulatedMessage())
                {
                    break;
                }

                e = new RawPointerEventArgs(
                    _mouseDevice,
                    timestamp,
                    _owner,
                    (WindowsMessage)msg switch
                    {
                        WindowsMessage.WM_LBUTTONDOWN => RawPointerEventType.LeftButtonDown,
                        WindowsMessage.WM_RBUTTONDOWN => RawPointerEventType.RightButtonDown,
                        WindowsMessage.WM_MBUTTONDOWN => RawPointerEventType.MiddleButtonDown,
                        WindowsMessage.WM_XBUTTONDOWN =>
                        HighWord(ToInt32(wParam)) == 1 ?
                        RawPointerEventType.XButton1Down :
                        RawPointerEventType.XButton2Down
                    },
                    DipFromLParam(lParam), GetMouseModifiers(wParam));
                break;
            }
Exemplo n.º 12
0
 /// <summary>
 /// Create raw keyevent arguments.
 /// </summary>
 /// <param name="VKCode"></param>
 /// <param name="isSysKey"></param>
 public RawKeyEventArgs(int VKCode, bool isSysKey)
 {
     this.VKCode   = VKCode;
     this.IsSysKey = isSysKey;
     this.Key      = KeyInterop.KeyFromVirtualKey(VKCode);
 }
Exemplo n.º 13
0
 public static bool IsKeyPressed(Key key)
 => IsKeyPressed((Keys)KeyInterop.VirtualKeyFromKey(key));
Exemplo n.º 14
0
 public static int RegisterHotKey(Key key, ModifierKeys modifiers = ModifierKeys.None, bool noRepeat = true)
 => RegisterHotKey((Keys)KeyInterop.VirtualKeyFromKey(key), modifiers, noRepeat);
Exemplo n.º 15
0
        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            Utility.CreateFileFromResource(Directories.ConfigFilePath, "LeagueSharp.Loader.Resources.config.xml");

            try
            {
                Config.Instance = ((Config)Utility.MapXmlFileToClass(typeof(Config), Directories.ConfigFilePath));
            }
            catch (Exception ee)
            {
                File.Delete(Directories.ConfigFilePath);
                System.Windows.MessageBox.Show("Couldn't load config.xml");
                Environment.Exit(0);
            }

            Browser.Visibility             = Visibility.Hidden;
            DataContext                    = this;
            GeneralSettingsItem.IsSelected = true;

            if (!File.Exists(Directories.CoreFilePath))
            {
                System.Windows.MessageBox.Show(string.Format("Couldn't find {0}", Path.GetFileName(Directories.CoreFilePath)));
                Environment.Exit(0);
            }
            Updater.MainWindow = this;
            Updater.UpdateLoader();

            Updater.GetRepositories(
                delegate(List <string> list)
            {
                if (list.Count > 0)
                {
                    Config.Instance.KnownRepositories.Clear();
                    foreach (var repo in list)
                    {
                        Config.Instance.KnownRepositories.Add(repo);
                    }
                }
            });

            if (Config.Instance.FirstRun)
            {
                LSUriScheme.CreateRegistryKeys(false);
            }

            //Try to login with the saved credentials.
            if (!Auth.Login(Config.Instance.Username, Config.Instance.Password).Item1)
            {
                ShowLoginDialog();
            }
            else
            {
                OnLogin(Config.Instance.Username);
            }

            Config.Instance.FirstRun = false;

            //Used to reload the assemblies from inside the game.
            KeyboardHook.SetHook();
            KeyboardHook.OnKeyUpTrigger += KeyboardHookOnOnKeyUpTrigger;
            KeyboardHook.HookedKeys.Add(KeyInterop.VirtualKeyFromKey(Config.Instance.Hotkeys.SelectedHotkeys.First(h => h.Name == "Reload").Hotkey));
            KeyboardHook.HookedKeys.Add(KeyInterop.VirtualKeyFromKey(Config.Instance.Hotkeys.SelectedHotkeys.First(h => h.Name == "CompileAndReload").Hotkey));

            foreach (var hk in Config.Instance.Hotkeys.SelectedHotkeys)
            {
                hk.PropertyChanged += hk_PropertyChanged;
            }

            InjectThread = new Thread(
                () =>
            {
                while (true)
                {
                    if (Config.Instance.Install)
                    {
                        Injection.Pulse();
                    }
                    Thread.Sleep(3000);
                }
            });

            InjectThread.Start();
            Config.Instance.PropertyChanged += ConfigOnPropertyChanged;
            foreach (var gameSetting in Config.Instance.Settings.GameSettings)
            {
                gameSetting.PropertyChanged += GameSettingOnPropertyChanged;
            }

            SettingsTabItem.Visibility = Visibility.Hidden;
        }
        private async void _listener_OnKeyPressed(object sender, INPUT e)
        {
            bool error = false; string message = "";

            try
            {
                if (Keyboard.Modifiers == ModifierKeys.Control)
                {
                    Key k          = KeyInterop.KeyFromVirtualKey(e.ki.wVk);
                    int virtualKey = KeyInterop.VirtualKeyFromKey(k);
                    if (k == Key.N)
                    {
                        // Invio della clipboard del client
                        ClientManager.NotifyClipboardAsynch();
                    }
                    else if (k == Key.M)
                    {
                        // Richiesta della clipboard al server
                        ClipboardTrasfer.SendUpdateRequest();
                    }
                    else if (virtualKey >= (int)VirtualKeyCode.VK_1 && virtualKey <= (int)VirtualKeyCode.VK_9) // Switch
                    {
                        virtualKey -= (int)VirtualKeyCode.VK_0;
                        if (virtualKey <= listIp.Count)
                        {
                            serverIP = IPAddress.Parse(listIp[virtualKey - 1].ipAddress);
                            Connection.disconnectFromServer();
                            ConnectWindow c = new ConnectWindow();
                            c.Show();
                        }
                    }
                    else if (virtualKey == (int)VirtualKeyCode.VK_0) // Disconnect
                    {
                        MessageDialogResult result = await this.ShowMessageAsync("Exit", "Are you sure you want to disconnect?", MessageDialogStyle.AffirmativeAndNegative, WPFProperties.metroDialogSettings);

                        if (result == MessageDialogResult.Affirmative)
                        {
                            if (disconnectButton.IsEnabled)
                            {
                                Connection.disconnectFromServer();
                            }
                        }
                    }
                    else
                    {
                        ClientManager.NotifyInputAsynch(e);
                    }
                }
                else
                {
                    ClientManager.NotifyInputAsynch(e);
                }
            }
            catch (Exception ex)
            {
                error   = true;
                message = ex.Message;
            }
            if (error)
            {
                MessageDialogResult result = await this.ShowMessageAsync("Error: " + message, "You are now disconnected from server", MessageDialogStyle.Affirmative, WPFProperties.metroDialogSettings);
            }
        }
Exemplo n.º 17
0
Arquivo: Naga.cs Projeto: Mej0/a
        public override void OnLoad()
        {
            base.OnLoad();
            var heroMenu = new Menu("Naga", "zaioNaga", false, "npc_dota_hero_naga_siren", true);

            heroMenu.AddItem(new MenuItem("zaioNagaAbilitiesText", "Supported Abilities"));
            var supportedStuff = new MenuItem("zaioNagaAbilities", string.Empty);

            supportedStuff.SetValue(new AbilityToggler(SupportedAbilities.ToDictionary(x => x, y => true)));
            heroMenu.AddItem(supportedStuff);

            heroMenu.AddItem(new MenuItem("zaioNagaKillstealAbilitiesText", "Supported Killsteal Abilities"));
            var supportedKillsteal = new MenuItem("zaioNagaKillstealAbilities", string.Empty);

            supportedKillsteal.SetValue(new AbilityToggler(KillstealAbilities.ToDictionary(x => x, y => true)));
            heroMenu.AddItem(supportedKillsteal);

            OnLoadMenuItems(supportedStuff, supportedKillsteal);

            _functionWheelItem =
                new MenuItem("zaioNagaFunctionWheel", "Function Wheel").SetValue(new KeyBind(0, KeyBindType.Press));
            _functionWheelItem.Tooltip       = "Hotkey for showing the function wheel.";
            _functionWheelItem.ValueChanged += _functionWheelItem_ValueChanged;
            heroMenu.AddItem(_functionWheelItem);

            _stackAnctientsItem = new MenuItem("zaioNagaStackAncients", "Stack Ancients?").SetValue(false);
            heroMenu.AddItem(_stackAnctientsItem);

            ZaioMenu.LoadHeroSettings(heroMenu);

            _illuAbility    = MyHero.GetAbilityById(AbilityId.naga_siren_mirror_image);
            _rootAbility    = MyHero.GetAbilityById(AbilityId.naga_siren_ensnare);
            _ripTideAbility = MyHero.GetAbilityById(AbilityId.naga_siren_rip_tide);

            _stackJungleEntry = new WheelEntry("Stack Jungle", StackJungle, false);
            _farmJungleEntry  = new WheelEntry("Farm Jungle", FarmJungleFunc);
            _pushLaneEntry    = new WheelEntry("Push Lanes", PushLanesFunc);
            _mixedModeEntry   = new WheelEntry("Mixed Mode", MixedMode);

            var key = KeyInterop.KeyFromVirtualKey((int)_functionWheelItem.GetValue <KeyBind>().Key);

            _functionWheel = new FunctionWheel(key)
            {
                _mixedModeEntry,
                _pushLaneEntry,
                _farmJungleEntry,
                _stackJungleEntry
            };

            _availableCamps = new List <JungleCamp>(JungleCamps.GetCamps);
            Log.Debug($"Init jungle camps! {_availableCamps.Count}");

            if (MyHero.Team == Team.Dire)
            {
                Log.Debug($"using radiant to dire creep lanes");
                _enemyCreepRouteTop    = _radiantToDireTop;
                _enemyCreepRouteMid    = _radiantToDireMid;
                _enemyCreepRouteBottom = _radiantToDireBot;
            }
            else
            {
                Log.Debug($"using reversed radiant to dire creep lanes");
                _enemyCreepRouteTop    = new List <Vector3>(_radiantToDireTop);
                _enemyCreepRouteMid    = new List <Vector3>(_radiantToDireMid);
                _enemyCreepRouteBottom = new List <Vector3>(_radiantToDireBot);

                _enemyCreepRouteTop.Reverse();
                _enemyCreepRouteMid.Reverse();
                _enemyCreepRouteBottom.Reverse();
            }
            Game.OnIngameUpdate += Game_OnIngameUpdate;
        }
Exemplo n.º 18
0
        private void txtVnos_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            int pomožna = (int)(KeyInterop.VirtualKeyFromKey(e.Key));

            vnešenZnak = (char)(pomožna);
            praviZnak  = trenutnaVrstica.tekst[štČrk];
            if (e.Key == Key.CapsLock)
            {
                return; //če smo prižgali caps lock naj ne šteje črk
            }
            if (e.Key == Key.Enter)
            {
                return; //samo, da ne šteje črk
            }
            var jeS = false;

            if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
            {
                jeS = true;
                m.PreveriShift();
            }


            if (e.Key == Key.RightShift || e.Key == Key.LeftShift)
            {
                return;
            }
            var jeKapps = Console.CapsLock;

            if ((!jeKapps && !jeS) || (jeKapps && jeS))
            {
                vnešenZnak = char.ToLower(vnešenZnak);
            }
            if (vnešenZnak == 186 && ((!jeKapps && !jeS) || (jeKapps && jeS)))
            {
                vnešenZnak = 'č';
            }
            if (vnešenZnak == 186 && ((jeKapps && !jeS) || (jeS && !jeKapps)))
            {
                vnešenZnak = 'Č';
            }
            if (vnešenZnak == 253 && ((!jeKapps && !jeS) || (jeKapps && jeS)))
            {
                vnešenZnak = 'đ';
            }
            if (vnešenZnak == 221 && ((jeKapps && !jeS) || (jeS && !jeKapps)))
            {
                vnešenZnak = 'Đ';
            }
            if (vnešenZnak == 254 && ((!jeKapps && !jeS) || (jeKapps && jeS)))
            {
                vnešenZnak = 'ć';
            }
            if (vnešenZnak == 222 && ((jeKapps && !jeS) || (jeS && !jeKapps)))
            {
                vnešenZnak = 'Ć';
            }
            if (vnešenZnak == 251 && ((!jeKapps && !jeS) || (jeKapps && jeS)))
            {
                vnešenZnak = 'š';
            }
            if (vnešenZnak == 219 && ((jeKapps && !jeS) || (jeS && !jeKapps))) //!!
            {
                vnešenZnak = 'Š';
            }
            if (vnešenZnak == 252 && ((!jeKapps && !jeS) || (jeKapps && jeS)))
            {
                vnešenZnak = 'ž';
            }
            if (vnešenZnak == 220 && ((jeKapps && !jeS) || (jeS && !jeKapps)))
            {
                vnešenZnak = 'Ž';
            }
            //if (vnešenZnak == 269 && !jeKapps && !jeS)
            //    vnešenZnak = 'è';
            if (vnešenZnak == 191 && !jeKapps && !jeS)
            {
                vnešenZnak = '\'';
            }
            if (vnešenZnak == 191 && (jeKapps || jeS))
            {
                vnešenZnak = '?';
            }
            if (vnešenZnak == 226 && !jeKapps && !jeS)
            {
                vnešenZnak = '<';
            }
            if (vnešenZnak == 226 && (jeKapps || jeS))
            {
                vnešenZnak = '>';
            }
            if (vnešenZnak == 190 && jeS)
            {
                vnešenZnak = ':';
            }
            if (vnešenZnak == 190 && !jeS)
            {
                vnešenZnak = '.';
            }
            if (vnešenZnak == 188 && !jeS)
            {
                vnešenZnak = ',';
            }
            if (vnešenZnak == 188 && jeS)
            {
                vnešenZnak = ';';
            }
            if (vnešenZnak == 189 && !jeKapps && !jeS)
            {
                vnešenZnak = '-';
            }
            if (vnešenZnak == 189 && (jeKapps || jeS))
            {
                vnešenZnak = '_';
            }
            if (vnešenZnak == 187 && !jeKapps && !jeS)
            {
                vnešenZnak = '+';
            }
            if (vnešenZnak == 187 && (jeKapps || jeS))
            {
                vnešenZnak = '*';
            }
            if (vnešenZnak == 48 && (jeKapps || jeS))
            {
                vnešenZnak = '=';
            }
            if (vnešenZnak == 49 && (jeKapps || jeS))
            {
                vnešenZnak = '!';
            }
            if (vnešenZnak == 50 && (jeKapps || jeS))
            {
                vnešenZnak = '"';
            }
            if (vnešenZnak == 51 && (jeS))
            {
                vnešenZnak = '#';
            }
            if (vnešenZnak == 52 && (jeS))
            {
                vnešenZnak = '$';
            }
            if (vnešenZnak == 53 && (jeS))
            {
                vnešenZnak = '%';
            }
            if (vnešenZnak == 54 && (jeS))
            {
                vnešenZnak = '&';
            }
            if (vnešenZnak == 55 && (jeS))
            {
                vnešenZnak = '/';
            }
            if (vnešenZnak == 56 && (jeS))
            {
                vnešenZnak = '(';
            }
            if (vnešenZnak == 57 && (jeS))
            {
                vnešenZnak = ')';
            }

            številoUdarcev++;
            switch (načinDela)
            {
            case NačinDela.Ignoriraj:
                if (e.Key == Key.Back)
                {
                    e.Handled = true;
                    return;
                }
                if (vnešenZnak != praviZnak)
                {
                    napake++;
                    txtN.Text = napake.ToString();
                    m.PobarvajNapačno(e.Key);
                    narobe.Add(e.Key);
                    e.Handled = true;
                    return;
                }
                if (vnešenZnak == praviZnak && narobe.Count > 0)
                {
                    m.Ponastavi(narobe);
                    narobe = new List <Key>();
                }
                break;

            case NačinDela.Ponovno:
                //if (e.Key == VirtualKey.Enter) //dodano, ker je šlo prehitro v novo vrstico
                //    return; //prenos noavzgor, verjetno je problem še kje druge
                break;

            case NačinDela.Briši:
                if (e.Key == Key.Back)
                {
                    štČrk--;
                    return;
                }
                break;

            case NačinDela.Uredi:
            case NačinDela.LahekTest:
                if (e.Key == Key.Back)
                {
                    štČrk--;
                    return;
                }
                //če grem levo ali desno v bistvu vrivam in se nič ne spremeni
                //kontrola je na koncu vrtsice
                break;

            case NačinDela.Test:
                if (e.Key == Key.Back)
                {
                    e.Handled = true;
                    return;
                }
                if (vnešenZnak != praviZnak)
                {
                    napake++;
                    txtNapake.Text = napake.ToString();
                    e.Handled      = true;
                    return;
                }
                break;
            }

            štČrk++;
        }
Exemplo n.º 19
0
        public static void Add(string name, KeyCombination combination)
        {
            if (handle == null)
            {
                throw new Exception("Hotkey: 窗口句柄尚未初始化!");
            }
            int i = index++;

            try
            {
                bool result = RegisterHotKey(handle, i, combination.ModifierKeys, (uint)KeyInterop.VirtualKeyFromKey(combination.Key));
                if (!result)
                {
                    throw new HotKeyAlreadyExistsException("快捷键已被占用");
                }
                combination.ID = i;
                hotkeys.Add(name, combination);
                keymap.Add(i, name);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 20
0
        private void KeyUp(object sender, KeyEventArgsCustom e)
        {
            switch (SelectedKeyboardImitationIndex)
            {
            case 0:    //Если AHK
                AddCommand($"AHKKeyUp(\"{Utilities.KeyCodeToUnicode.VKCodeToUnicode((uint)KeyInterop.VirtualKeyFromKey(e.Key))}\")");
                break;

            case 1:
                AddCommand(string.Format(@"KeyUp(""{0}"")", e.Key));
                break;
            }
        }
Exemplo n.º 21
0
 void HotkeyEdited(Key NewKey, Modifiers NewModifiers)
 {
     HotkeyEdited((Keys)KeyInterop.VirtualKeyFromKey(NewKey), NewModifiers);
 }
Exemplo n.º 22
0
        protected virtual unsafe IntPtr AppWndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
        {
            const double wheelDelta = 120.0;
            uint         timestamp  = unchecked ((uint)GetMessageTime());

            RawInputEventArgs e = null;
            var shouldTakeFocus = false;

            switch ((WindowsMessage)msg)
            {
            case WindowsMessage.WM_ACTIVATE:
            {
                var wa = (WindowActivate)(ToInt32(wParam) & 0xffff);

                switch (wa)
                {
                case WindowActivate.WA_ACTIVE:
                case WindowActivate.WA_CLICKACTIVE:
                {
                    Activated?.Invoke();
                    break;
                }

                case WindowActivate.WA_INACTIVE:
                {
                    Deactivated?.Invoke();
                    break;
                }
                }

                return(IntPtr.Zero);
            }

            case WindowsMessage.WM_NCCALCSIZE:
            {
                if (ToInt32(wParam) == 1 && !HasFullDecorations || _isClientAreaExtended)
                {
                    return(IntPtr.Zero);
                }

                break;
            }

            case WindowsMessage.WM_CLOSE:
            {
                bool?preventClosing = Closing?.Invoke();
                if (preventClosing == true)
                {
                    return(IntPtr.Zero);
                }

                // Based on https://github.com/dotnet/wpf/blob/master/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Window.cs#L4270-L4337
                // We need to enable parent window before destroying child window to prevent OS from activating a random window behind us.
                // This is described here: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enablewindow#remarks
                // Our window closed callback will set enabled state to a correct value after child window gets destroyed.
                // We need to verify if parent is still alive (perhaps it got destroyed somehow).
                if (_parent != null && IsWindow(_parent._hwnd))
                {
                    var wasActive = GetActiveWindow() == _hwnd;

                    _parent.SetEnabled(true);

                    // We also need to activate our parent window since again OS might try to activate a window behind if it is not set.
                    if (wasActive)
                    {
                        SetActiveWindow(_parent._hwnd);
                    }
                }

                break;
            }

            case WindowsMessage.WM_DESTROY:
            {
                //Window doesn't exist anymore
                _hwnd = IntPtr.Zero;
                //Remove root reference to this class, so unmanaged delegate can be collected
                s_instances.Remove(this);
                Closed?.Invoke();

                _mouseDevice.Dispose();
                _touchDevice?.Dispose();
                //Free other resources
                Dispose();
                return(IntPtr.Zero);
            }

            case WindowsMessage.WM_DPICHANGED:
            {
                var dpi            = ToInt32(wParam) & 0xffff;
                var newDisplayRect = Marshal.PtrToStructure <RECT>(lParam);
                _scaling = dpi / 96.0;
                ScalingChanged?.Invoke(_scaling);
                SetWindowPos(hWnd,
                             IntPtr.Zero,
                             newDisplayRect.left,
                             newDisplayRect.top,
                             newDisplayRect.right - newDisplayRect.left,
                             newDisplayRect.bottom - newDisplayRect.top,
                             SetWindowPosFlags.SWP_NOZORDER |
                             SetWindowPosFlags.SWP_NOACTIVATE);
                return(IntPtr.Zero);
            }

            case WindowsMessage.WM_KEYDOWN:
            case WindowsMessage.WM_SYSKEYDOWN:
            {
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    _owner,
                    RawKeyEventType.KeyDown,
                    KeyInterop.KeyFromVirtualKey(ToInt32(wParam), ToInt32(lParam)),
                    WindowsKeyboardDevice.Instance.Modifiers);
                break;
            }

            case WindowsMessage.WM_MENUCHAR:
            {
                // mute the system beep
                return((IntPtr)((int)MenuCharParam.MNC_CLOSE << 16));
            }

            case WindowsMessage.WM_KEYUP:
            case WindowsMessage.WM_SYSKEYUP:
            {
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    _owner,
                    RawKeyEventType.KeyUp,
                    KeyInterop.KeyFromVirtualKey(ToInt32(wParam), ToInt32(lParam)),
                    WindowsKeyboardDevice.Instance.Modifiers);
                break;
            }

            case WindowsMessage.WM_CHAR:
            {
                // Ignore control chars
                if (ToInt32(wParam) >= 32)
                {
                    e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, _owner,
                                                  new string((char)ToInt32(wParam), 1));
                }

                break;
            }

            case WindowsMessage.WM_LBUTTONDOWN:
            case WindowsMessage.WM_RBUTTONDOWN:
            case WindowsMessage.WM_MBUTTONDOWN:
            case WindowsMessage.WM_XBUTTONDOWN:
            {
                shouldTakeFocus = ShouldTakeFocusOnClick;
                if (ShouldIgnoreTouchEmulatedMessage())
                {
                    break;
                }

                e = new RawPointerEventArgs(
                    _mouseDevice,
                    timestamp,
                    _owner,
                    (WindowsMessage)msg switch
                    {
                        WindowsMessage.WM_LBUTTONDOWN => RawPointerEventType.LeftButtonDown,
                        WindowsMessage.WM_RBUTTONDOWN => RawPointerEventType.RightButtonDown,
                        WindowsMessage.WM_MBUTTONDOWN => RawPointerEventType.MiddleButtonDown,
                        WindowsMessage.WM_XBUTTONDOWN =>
                        HighWord(ToInt32(wParam)) == 1 ?
                        RawPointerEventType.XButton1Down :
                        RawPointerEventType.XButton2Down
                    },
                    DipFromLParam(lParam), GetMouseModifiers(wParam));
                break;
            }
Exemplo n.º 23
0
        protected virtual IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
        {
            bool unicode = UnmanagedMethods.IsWindowUnicode(hWnd);

            const double wheelDelta = 120.0;
            uint         timestamp  = unchecked ((uint)UnmanagedMethods.GetMessageTime());

            RawInputEventArgs e = null;

            WindowsMouseDevice.Instance.CurrentWindow = this;

            switch ((UnmanagedMethods.WindowsMessage)msg)
            {
            case UnmanagedMethods.WindowsMessage.WM_ACTIVATE:
                var wa = (UnmanagedMethods.WindowActivate)((int)wParam & 0xffff);

                switch (wa)
                {
                case UnmanagedMethods.WindowActivate.WA_ACTIVE:
                case UnmanagedMethods.WindowActivate.WA_CLICKACTIVE:
                    _isActive = true;
                    Activated?.Invoke();
                    break;

                case UnmanagedMethods.WindowActivate.WA_INACTIVE:
                    _isActive = false;
                    Deactivated?.Invoke();
                    break;
                }

                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_DESTROY:
                if (Closed != null)
                {
                    UnmanagedMethods.UnregisterClass(_className, Marshal.GetHINSTANCE(GetType().Module));
                    Closed();
                }

                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_DPICHANGED:
                var dpi = (int)wParam & 0xffff;
                _scaling = dpi / 96.0;
                ScalingChanged?.Invoke(_scaling);
                break;

            case UnmanagedMethods.WindowsMessage.WM_KEYDOWN:
            case UnmanagedMethods.WindowsMessage.WM_SYSKEYDOWN:
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    RawKeyEventType.KeyDown,
                    KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers);
                break;

            case UnmanagedMethods.WindowsMessage.WM_KEYUP:
            case UnmanagedMethods.WindowsMessage.WM_SYSKEYUP:
                e = new RawKeyEventArgs(
                    WindowsKeyboardDevice.Instance,
                    timestamp,
                    RawKeyEventType.KeyUp,
                    KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers);
                break;

            case UnmanagedMethods.WindowsMessage.WM_CHAR:
                // Ignore control chars
                if (wParam.ToInt32() >= 32)
                {
                    e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp,
                                                  new string((char)wParam.ToInt32(), 1));
                }

                break;

            case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_MBUTTONDOWN:
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    msg == (int)UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN
                            ? RawMouseEventType.LeftButtonDown
                            : msg == (int)UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN
                                ? RawMouseEventType.RightButtonDown
                                : RawMouseEventType.MiddleButtonDown,
                    DipFromLParam(lParam), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_LBUTTONUP:
            case UnmanagedMethods.WindowsMessage.WM_RBUTTONUP:
            case UnmanagedMethods.WindowsMessage.WM_MBUTTONUP:
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    msg == (int)UnmanagedMethods.WindowsMessage.WM_LBUTTONUP
                            ? RawMouseEventType.LeftButtonUp
                            : msg == (int)UnmanagedMethods.WindowsMessage.WM_RBUTTONUP
                                ? RawMouseEventType.RightButtonUp
                                : RawMouseEventType.MiddleButtonUp,
                    DipFromLParam(lParam), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSEMOVE:
                if (!_trackingMouse)
                {
                    var tm = new UnmanagedMethods.TRACKMOUSEEVENT
                    {
                        cbSize      = Marshal.SizeOf(typeof(UnmanagedMethods.TRACKMOUSEEVENT)),
                        dwFlags     = 2,
                        hwndTrack   = _hwnd,
                        dwHoverTime = 0,
                    };

                    UnmanagedMethods.TrackMouseEvent(ref tm);
                }

                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    RawMouseEventType.Move,
                    DipFromLParam(lParam), GetMouseModifiers(wParam));

                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSEWHEEL:
                e = new RawMouseWheelEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    ScreenToClient(DipFromLParam(lParam)),
                    new Vector(0, ((int)wParam >> 16) / wheelDelta), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE:
                _trackingMouse = false;
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    RawMouseEventType.LeaveWindow,
                    new Point(), WindowsKeyboardDevice.Instance.Modifiers);
                break;

            case UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN:
            case UnmanagedMethods.WindowsMessage.WM_NCMBUTTONDOWN:
                e = new RawMouseEventArgs(
                    WindowsMouseDevice.Instance,
                    timestamp,
                    _owner,
                    msg == (int)UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN
                            ? RawMouseEventType.NonClientLeftButtonDown
                            : msg == (int)UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN
                                ? RawMouseEventType.RightButtonDown
                                : RawMouseEventType.MiddleButtonDown,
                    new Point(0, 0), GetMouseModifiers(wParam));
                break;

            case UnmanagedMethods.WindowsMessage.WM_PAINT:
                if (Paint != null)
                {
                    UnmanagedMethods.PAINTSTRUCT ps;

                    if (UnmanagedMethods.BeginPaint(_hwnd, out ps) != IntPtr.Zero)
                    {
                        UnmanagedMethods.RECT r;
                        UnmanagedMethods.GetUpdateRect(_hwnd, out r, false);
                        var f = Scaling;
                        Paint(new Rect(r.left / f, r.top / f, (r.right - r.left) / f, (r.bottom - r.top) / f));
                        UnmanagedMethods.EndPaint(_hwnd, ref ps);
                    }
                }

                return(IntPtr.Zero);

            case UnmanagedMethods.WindowsMessage.WM_SIZE:
                if (Resized != null)
                {
                    var clientSize = new Size((int)lParam & 0xffff, (int)lParam >> 16);
                    Resized(clientSize / Scaling);
                }

                return(IntPtr.Zero);
            }

            if (e != null && Input != null)
            {
                Input(e);

                if (e.Handled)
                {
                    return(IntPtr.Zero);
                }
            }

            return(UnmanagedMethods.DefWindowProc(hWnd, msg, wParam, lParam));
        }
Exemplo n.º 24
0
 private void ChangeHotKey(int mod, Key Key, int hotkeyId)
 {
     ChangeHotKey(mod, KeyInterop.VirtualKeyFromKey(Key), hotkeyId);
 }
Exemplo n.º 25
0
 public RawKeyEventArgs(int vkCode, bool isSysKey)
 {
     VKCode   = vkCode;
     IsSysKey = isSysKey;
     Key      = KeyInterop.KeyFromVirtualKey(VKCode);
 }
Exemplo n.º 26
0
        private void OnKeyPress(object sender, KeyEventArgs e)
        {
            var formsKey = (Keys)KeyInterop.VirtualKeyFromKey(e.Key);

            _controller.KeyDown((int)formsKey);
        }
Exemplo n.º 27
0
        public IntPtr SetWindowsHookExOverride(int idHook, KeyboardHookDelegate lpfn, IntPtr hMod, uint dwThreadId)
        {
            _interface.DebugWriteLine("Hook install intercepted and overriden.");

            var result = originalSetWindowsHookExW(
                idHook,
                (nCode, wParam, lParam) =>
            {
                var vkCode     = Marshal.ReadInt32(lParam);
                var currentKey = KeyInterop.KeyFromVirtualKey(vkCode);

                var keyEvent = (KeyEvent)wParam.ToUInt32();

                var isCurrentKeyDown = keyEvent == KeyEvent.WM_KEYDOWN;
                var shouldIgnoreHook = _interface.GetShouldIgnoreHook();
                var shouldOverride   = ctrlIsDown &&
                                       (currentKey == Key.V) &&
                                       !shouldIgnoreHook;

                switch (currentKey)
                {
                case Key.LeftCtrl:
                case Key.RightCtrl:
                    ctrlIsDown = isCurrentKeyDown;
                    break;

                case Key.V:
                    vIsDown = isCurrentKeyDown;
                    break;
                }

                var fetchOriginalResult = new Lazy <IntPtr>(() => lpfn(nCode, wParam, lParam));
                if (!shouldOverride)
                {
                    var value = fetchOriginalResult.Value.ToInt32();
                    _interface.DebugWriteLine($"Original call for {currentKey} {(isCurrentKeyDown ? "down" : "up")} returned {value}.");

                    if ((value != 1) && (value != -1))
                    {
                        return(fetchOriginalResult.Value);
                    }
                }

                switch (currentKey)
                {
                case Key.LeftCtrl:
                case Key.RightCtrl:
                    shouldOverride = true;
                    break;

                case Key.V:
                    shouldOverride = ctrlIsDown;
                    break;

                case Key.Down:
                case Key.Up:
                case Key.Left:
                case Key.Right:
                    shouldOverride = ctrlIsDown && vIsDown;
                    break;
                }

                if (shouldOverride || shouldIgnoreHook)
                {
                    return(CallNextHookEx(
                               new IntPtr(idHook), nCode, wParam, lParam));
                }

                return(fetchOriginalResult.Value);
            },
                hMod,
                dwThreadId);

            return(result);
        }
Exemplo n.º 28
0
 void hk_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     KeyboardHook.HookedKeys.Add(KeyInterop.VirtualKeyFromKey(((HotkeyEntry)sender).Hotkey));
 }
Exemplo n.º 29
0
        private void OnKeyUp(object sender, System.Windows.Input.KeyEventArgs args)
        {
            if (mCurrentBinding == null)
            {
                return;
            }

            mCurrentPressedKeys.Remove(args.Key);
            if (mCurrentPressedKeys.Count != 0)
            {
                return;
            }

            var border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border;

            if (border != null)
            {
                border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0));
            }
            var bindField = mCurrentBinding.Tag as Tuple <FieldInfo, object>;

            if (bindField != null && mCurrentKeys.Count > 0)
            {
                bindField.Item1.SetValue(bindField.Item2, mCurrentKeys.Select(k => (Keys)KeyInterop.VirtualKeyFromKey(k)).ToArray());
                KeyBindings.Save();
            }

            mCurrentBinding = null;
        }
Exemplo n.º 30
0
        public Configuration GetConfiguration(int pid)
        {
            var reload           = 0x74;
            var recompile        = 0x77;
            var antiAfk          = false;
            var console          = false;
            var towerRange       = false;
            var extendedZoom     = false;
            var drawings         = true;
            var ping             = true;
            var menuToggle       = 0x78;
            var menuPress        = 0x10;
            var selectedLanguage = "";
            var statistics       = true;

            try
            {
                reload =
                    KeyInterop.VirtualKeyFromKey(
                        Config.Instance.Hotkeys.SelectedHotkeys.First(h => h.Name == "Reload").Hotkey);
                recompile =
                    KeyInterop.VirtualKeyFromKey(
                        Config.Instance.Hotkeys.SelectedHotkeys.First(h => h.Name == "CompileAndReload").Hotkey);
                antiAfk = Config.Instance.Settings.GameSettings.First(s => s.Name == "Anti-AFK").SelectedValue == "True";
                console = Config.Instance.Settings.GameSettings.First(s => s.Name == "Debug Console").SelectedValue
                          == "True";
                towerRange =
                    Config.Instance.Settings.GameSettings.First(s => s.Name == "Display Enemy Tower Range")
                    .SelectedValue == "True";
                extendedZoom = Config.Instance.Settings.GameSettings.First(s => s.Name == "Extended Zoom").SelectedValue
                               == "True";
                drawings = Config.Instance.Settings.GameSettings.First(s => s.Name == "Show Drawings").SelectedValue
                           == "True";
                ping       = Config.Instance.Settings.GameSettings.First(s => s.Name == "Show Ping").SelectedValue == "True";
                statistics =
                    Config.Instance.Settings.GameSettings.First(s => s.Name == "Send Anonymous Assembly Statistics")
                    .SelectedValue == "True";
                menuToggle =
                    KeyInterop.VirtualKeyFromKey(
                        Config.Instance.Hotkeys.SelectedHotkeys.First(h => h.Name == "ShowMenuToggle").Hotkey);
                menuPress =
                    KeyInterop.VirtualKeyFromKey(
                        Config.Instance.Hotkeys.SelectedHotkeys.First(h => h.Name == "ShowMenuPress").Hotkey);
                selectedLanguage = Config.Instance.SelectedLanguage;
            }
            catch
            {
                // ignored
            }

            return(new Configuration
            {
                DataDirectory = Directories.AppDataDirectory,
                LeagueSharpDllPath = PathRandomizer.LeagueSharpDllPath,
                LibrariesDirectory = Directories.CoreDirectory,
                ReloadKey = reload,
                ReloadAndRecompileKey = recompile,
                MenuToggleKey = menuToggle,
                MenuKey = menuPress,
                UnloadKey = 0x75,
                AntiAfk = antiAfk,
                Console = console,
                TowerRange = towerRange,
                SelectedLanguage = selectedLanguage,
                ExtendedZoom = extendedZoom,
                ShowPing = ping,
                ShowDrawing = drawings,
                SendStatistics = statistics,
                Permissions = null
            });
        }