Создание альтернативных кодов на ноутбуке без них - PullRequest
1 голос
/ 13 января 2012

В моем ноутбуке есть цифровая клавиатура, но у него нет клавиши NumLock, а цифровая клавиатура - это всего лишь копия ряда цифр над буквами.Это подтверждается кодами виртуальных клавиш, посылаемыми при нажатии этих клавиш.

Я пытаюсь разработать небольшую программу для имитации кодов alt при нажатии клавиши alt и обычных чисел.Я использую низкоуровневую клавиатуру (у меня похожий формат, работающий в другой программе), и сначала проверяю, нажата ли какая-либо из клавиш alt.Если есть, я перебираю коды ВК 0x30-0x39 (клавиши 0-9).Если одна из них нажата в этот момент, я отменяю фактическое нажатие клавиши, возвращая значение 1, и вместо этого отправляю версию этой клавиши на цифровой клавиатуре (alt все еще нажата в это время).

Я могу подтвердить, что перехват достигнут, и что нажатие клавиши alt распознается успешно.Однако, когда я проверяю совпадения на 0-9, либо печатается только пара, прежде чем ничего не совпадет, либо мне приходится поднимать вверх и нажимать клавишу alt каждый раз, когда я нажимаю число.Кроме того, один номер может быть напечатан 16 раз после отпускания alt, нажав номер, а затем, удерживая нажатой alt, и нажав другой (это 16x).

Кроме того, я могу подтвердить, что последовательность SendInput работает путем копированиячасть от крючка, поместив его в основную функцию и заменив i на 0x30.После запуска в текстовом документе будет набрано 0.

При удерживании ALT (вниз) + 6 + 5 + ALT (вверх) в текстовом документе отображается «65».Если я добавлю еще один ALT (вниз) +6, появятся 16 шестерок.

Процедура подключения:

LRESULT CALLBACK proc (int code, WPARAM wParam, LPARAM event) //hook proc
{
    if (code < HC_ACTION) //don't process if not meant to
        return CallNextHookEx (0, code, wParam, event); 

    if (GetAsyncKeyState (VK_MENU) & 0x8000) //if either alt is down
    {
        for (int i = 0x30; i <= 0x39; ++i) //loop 0-9
        {
            if (GetAsyncKeyState (i) & 0x8000) //if index is down
            {
                cout << "MATCH\n"; //debug

                input.ki.wVk = i + 0x30; //set VK code to numpad version of index
                input.ki.dwFlags = 0; //key is being pressed
                SendInput (1, &input, sizeof (INPUT)); //send keystroke down

                input.ki.dwFlags = KEYEVENTF_KEYUP; //key is being released
                SendInput (1, &input, sizeof (INPUT)); //send keystroke up

                while (GetAsyncKeyState (i) & 0x8000) //wait for normal key to be released
                    Sleep (10); //don't hog CPU

                return 1; //discard normal key
            } //end if match
        } //end for
    } //end if alt

    return CallNextHookEx (0, code, wParam, event); //if any key not handled, pass on
} //end function

1 Ответ

0 голосов
/ 21 января 2012

Что ж, я наконец-то вернулся к этому, и после еще одного тестирования я обнаружил, что программная отправка [ALT] [num6] [num5] [ALT] ничего не делает. Я нахожу это странным, потому что я могу смоделировать клавиши регулировки громкости на клавиатурах Mac, несмотря на отсутствие этих клавиш.

Поскольку компьютер просто не может посылать альтернативные коды, я объявляю этот полезный инструмент по-королевски неуместным, если не сопоставлю тысячи символов.

EDIT:

Вот что вам нужно сделать, чтобы цифровая клавиатура работала на G74SX-XA1:

  1. Загрузите BIOS 203 (я не знаю, работает 202 или нет, я перешел с 201 на 203).
  2. Поместите файл на флэш-диск в формате FAT32.
  3. Перезагрузите компьютер и либо нажмите F4, чтобы перейти прямо в EasyFlash, либо перейдите к нему через BIOS. Программа Winflash, которая поставляется с ней, не работает.
  4. Выберите обновленный файл BIOS на флешке.
  5. Теперь индикатор numlock всегда будет гореть, и цифровая клавиатура будет иметь коды виртуальных клавиш цифровой клавиатуры, а не цифры над буквами. Это, естественно, включает в себя рабочие коды ALT.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...