ACPAddIn.ThisAddIn.handleRequestSuggestionMode C# (CSharp) Méthode

handleRequestSuggestionMode() private méthode

private handleRequestSuggestionMode ( KbDllHookStruct kbDllHookStruct ) : bool
kbDllHookStruct KbDllHookStruct
Résultat bool
        private bool handleRequestSuggestionMode(KbDllHookStruct kbDllHookStruct)
        {
            // Keep track of keyboard key 0-9, a-z and ' "
            // For the full list of key covers, please refer to http://www.kbdedit.com/manual/low_level_vk_list.html
            int VK_KEY_0 = 0x30;
            int VK_KEY_Z = 0x5A;
            int VK_OEM_7 = 0xDE; // OEM_7 (" ')
            int VK_OEM_1 = 0xBA; // OEM_1 (: ;)
            int VK_SPACE = 0x20;
            int VK_BACK = 0x08;

            int VK_LCONTROL = 0xA2;
            int VK_RCONTROL = 0xA3;
            int VK_LMENU = 0xA4; // left atrl
            int VK_RMENU = 0xA5; // right atrl
            int VK_LSHIFT = 0xA0;
            int VK_RSHIFT = 0xA1;

            if (autoCompleteForm.Visible)
            {
                bool isCTRLKey = (Convert.ToBoolean(GetAsyncKeyState(VK_LCONTROL)) || Convert.ToBoolean(GetAsyncKeyState(VK_RCONTROL)));

                if (isCTRLKey)
                {
                    int[] keys = {(int)Keys.D1, (int)Keys.D2, (int)Keys.D3, (int)Keys.D4, (int)Keys.D5,
                                     (int)Keys.D6, (int)Keys.D7, (int)Keys.D8, (int)Keys.D9};

                    for (int i = 0; i < autoCompleteForm.getDisplaySuggestionCount(); i++)
                    {
                        if (kbDllHookStruct.vkCode == keys[i])
                        {
                            autoCompleteForm.quickPaste(i);
                            return false;
                        }
                    }
                }

                // Allow user to interact with the form when the pop-up is displaying.
                if (kbDllHookStruct.vkCode == (int)Keys.Down || kbDllHookStruct.vkCode == (int)Keys.Up)
                {
                    autoCompleteForm.selectFirstIndex();
                    return false; // block key
                }
                if (kbDllHookStruct.vkCode == (int)Keys.Right)
                {
                    autoCompleteForm.nextSuggestionPage();
                    return false; // block key
                }
                if (kbDllHookStruct.vkCode == (int)Keys.Left)
                {
                    // With this check, it allow user to press left button on Document when there is no previous page
                    if (autoCompleteForm.getPageIndex() != 1)
                    {
                        autoCompleteForm.previousSuggestionPage();
                        return false; // block key
                    }
                }
                if (kbDllHookStruct.vkCode == (int)Keys.Escape)
                {
                    autoCompleteForm.Hide();
                    return false; // block key
                }
            }

            bool isValidKeyTrigger = (kbDllHookStruct.vkCode >= VK_KEY_0 && kbDllHookStruct.vkCode <= VK_KEY_Z) || kbDllHookStruct.vkCode == VK_OEM_7
                || kbDllHookStruct.vkCode == VK_OEM_1 || kbDllHookStruct.vkCode == VK_SPACE || kbDllHookStruct.vkCode == VK_BACK || kbDllHookStruct.vkCode == (int)Keys.OemPeriod
                || kbDllHookStruct.vkCode == (int)Keys.Oem2;

            // Special keys here refer to ALT and CTRL key
            bool isSpecialKeyPressed = (Convert.ToBoolean(GetAsyncKeyState(VK_LCONTROL)) || Convert.ToBoolean(GetAsyncKeyState(VK_RCONTROL)) ||
                Convert.ToBoolean(GetAsyncKeyState(VK_LMENU)) || Convert.ToBoolean(GetAsyncKeyState(VK_RMENU)));

            if (isValidKeyTrigger && !isSpecialKeyPressed && Mode == TriggerMode.AUTO_TRIGGER)
            {

                autoCompleteForm.Hide();

                // Fetch GUITHREADINFO to prepare for evaluateCaretPosition() when the triggerSuggTimer elapse.
                getCaretPosition();

                if (triggerSuggTimer == null)
                {
                    triggerSuggTimer = new System.Timers.Timer();
                    triggerSuggTimer.Elapsed += new ElapsedEventHandler(delegate(Object sender, ElapsedEventArgs e)
                    {
                        triggerSuggTimer.Stop();
                        triggerSuggestion(true);

                        // Logging for user testing
                        startReqSuggTime = DateTime.Now;
                    });
                }

                triggerSuggTimer.Interval = TriggerDelay;
                triggerSuggTimer.Stop();
                triggerSuggTimer.Start();
            }
            else if ((kbDllHookStruct.vkCode == triggerSuggestionPopUpKey) && checkHotkeysModifiers("triggerSuggestionPopUp"))
            {
                getCaretPosition();
                triggerSuggestion(false);
            }
            else if (kbDllHookStruct.vkCode != VK_LCONTROL && kbDllHookStruct.vkCode != VK_RCONTROL && kbDllHookStruct.vkCode != VK_LSHIFT
                && kbDllHookStruct.vkCode != VK_RSHIFT)
            {
                autoCompleteForm.Hide();
            }

            return true;
        }