예제 #1
0
        private static int CommonWndProc(IntPtr oldWndProc, IntPtr hWnd, int msg, int wParam, int lParam)
        {
            if (Main.IsPluginDisabled)
            {
                return(0);
            }

            try
            {
                var result = Win32.CallWindowProcW(oldWndProc, hWnd, msg, wParam, lParam);

                if (msg == WM_KEYDOWN && _onKeyboardDown != null)
                {
                    _onKeyboardDown.Invoke(wParam);
                }
                else if (_onMouseAction != null && Enum.IsDefined(typeof(MouseMessage), msg))
                {
                    _onMouseAction.Invoke((MouseMessage)msg);
                }

                return(result);
            }
            catch (Exception e)
            {
                Logger.Error(e.Message, e);
                return(0);
            }
        }
예제 #2
0
 void InvalidName()
 {
     if (onInvalidName != null)
     {
         onInvalidName.Invoke();
     }
 }
예제 #3
0
 void KeyActionCancel()
 {
     if (onCancel != null)
     {
         onCancel.Invoke();
     }
     else
     {
         Debug.LogWarning("There nothing assigned on Keyboard-Cancel-Button, please assign manualy!");
     }
 }
예제 #4
0
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                //Console.WriteLine((Keys)vkCode);
                KeyboardEvent?.Invoke(null, new KeyboardEventArgs((Keys)vkCode));
            }

            return(CallNextHookEx(_hookID, nCode, wParam, lParam));
        }
예제 #5
0
        public override bool Poll()
        {
            bool returnStatus = false;

            KeyStateEventData[] eventDataArray;

            lock (_keyEventData)
            {
                eventDataArray = _keyEventData.ToArray();
                _keyEventData.Clear();
            }

            if (eventDataArray.Length == 0)
            {
                return(returnStatus);
            }

            Key[] currentstate = GetKeyState(_keyStateArray, GetPressedKeys(eventDataArray), GetRelasedKeys(eventDataArray));
            Key[] pressedKeys  = GetNewItems(_keyStateArray, currentstate);
            Key[] releasedKeys = GetMissingItems(_keyStateArray, currentstate);


            _keyStateArray = currentstate;

            KeyEventData eventData = new KeyEventData(currentstate, pressedKeys, releasedKeys);

            if (pressedKeys.Length != 0 || releasedKeys.Length != 0 || currentstate.Length != 0)
            {
                KeyboardEvent?.Invoke(new KeyEventArgs(eventData));
                returnStatus = true;
            }

            if (pressedKeys.Length != 0)
            {
                KeyboardKeyPressEvent?.Invoke(new KeyEventArgs(eventData));
            }

            if (releasedKeys.Length != 0)
            {
                KeyboardKeyReleaseEvent?.Invoke(new KeyEventArgs(eventData));
            }

            return(returnStatus);
        }
예제 #6
0
 private unsafe static IntPtr LLKeyboardCallback(int nCode, KeyboardButtonsState wParam, KeyBoardLowlevelHookStruct *lParam)
 {
     if (nCode > -1)
     {
         KeyBoardLowlevelHookStruct hookStruct = *lParam;
         VirtualKey key = hookStruct.VkCode;
         if (key == VirtualKey.LShift)
         {
             LShiftPress = (wParam == KeyboardButtonsState.WM_KEYDOWN);
         }
         if (key == VirtualKey.RShift)
         {
             RShiftPress = (wParam == KeyboardButtonsState.WM_KEYDOWN);
         }
         if (key == VirtualKey.CapsLock)
         {
             CapsPressed = (wParam == KeyboardButtonsState.WM_KEYDOWN);
         }
         string v = (LShiftPress || RShiftPress || CapsPressed) ? key.ToString() : key.ToString().ToLower();
         KeyboardEvent.Invoke(v, wParam, hookStruct);
     }
     return(User32.CallNextHookEx(KBHook, nCode, (IntPtr)wParam, (IntPtr)lParam));
 }
예제 #7
0
    private void AddKeyboard(JsonArray rows, Transform container)
    {
        Navigation buttonNavNone = new Navigation();

        buttonNavNone.mode = Navigation.Mode.None;
        float x = 0f, y = 0f;

        for (int r = 0; r < rows.Count; r++)
        {
            x = rows[r]["x"];
            y = rows[r]["y"];

            JsonArray keys = rows[r]["keys"] as JsonArray;
            for (int k = 0; k < keys.Count; k++)
            {
                string  keyName    = "BLANK";
                Vector2 buttonSize = defaultSize;

                if (keys[k].ContainsKey("size"))
                {
                    keyName    = keys[k]["text"];
                    buttonSize = otherSizes[keys[k]["size"]];
                }
                else
                {
                    keyName = keys[k];
                }

                // create GameObject
                GameObject keyboardKey = new GameObject();
                keyboardKey.name = "Keyboard Key " + keyName;

                RectTransform rectTransform = keyboardKey.AddComponent <RectTransform>();
                rectTransform.SetParent(container);
                rectTransform.localScale       = Vector3.one;
                rectTransform.anchorMin        = new Vector2(0, 1);
                rectTransform.anchorMax        = new Vector2(0, 1);
                rectTransform.pivot            = new Vector2(0, 1);
                rectTransform.sizeDelta        = buttonSize;
                rectTransform.anchoredPosition = new Vector2(x, y);

                Image image = keyboardKey.AddComponent <Image>();
                image.color = keyColor;

                //Button button = keyboardKey.AddComponent<Button>();
                //button.navigation = buttonNavNone;
                //button.onClick.AddListener(() => {
                //    keyboardEvents.Invoke(keyName);
                //});
                EventTrigger       eventTrigger = keyboardKey.AddComponent <EventTrigger>();
                EventTrigger.Entry entry        = new EventTrigger.Entry();
                entry.eventID = EventTriggerType.PointerClick;
                entry.callback.AddListener((eventData) =>
                {
                    keyboardEvents.Invoke(keyName);
                });
                eventTrigger.triggers.Add(entry);

                x += buttonSize.x + spacing;
            }
        }
    }
예제 #8
0
 public void Receive(KeyboardEvent @event) => KeyboardEvent?.Invoke(this, @event);
예제 #9
0
 private void NewKeyboardEvent(IntPtr wParam, KBDLLHOOKSTRUCT hookStruct)
 {
     KeyboardEvent?.Invoke(this, new LowLevelKeyEventArgs((EventType)wParam, hookStruct));
 }