Карта отсутствующих символов на итальянских клавиатурах - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы отобразить символы, которых нет на моей раскладке клавиатуры, возможно ли это?

Моя раскладка клавиатуры итальянская , а символы ~ и `
Я хотел бы переназначить, когда я нажимаю AltGr (VK_RMENU) + VK_OEM_4 или VK_OEM_6.

Но эти символы отсутствуют в списке Коды виртуальных клавиш , поэтому я думаю, что я не могу использовать SendInput для переназначения ...

Для других символов SendInput работает

1 Ответ

0 голосов
/ 27 февраля 2019

Но этих символов нет в списке кодов виртуальных клавиш, поэтому я думаю, что не могу использовать SendInput для переназначения ...

~ и ` в списке кодов виртуальных клавиш .Это VK_OEM_3 (0xC0) .

enter image description here

Вы можете использовать SendInput, введите ~ и `вот так:

UINT result = 0;
DWORD errCode = 0;

tagINPUT inputArray[2] = {};
tagKEYBDINPUT keyboardInput[2] = {};

keyboardInput[1].wVk = 0xC0; // Virtual-Key code for the '`~' key.
keyboardInput[1].wScan = 0x29; // Scan code for the '`~' key.

inputArray[1].type = INPUT_KEYBOARD;
inputArray[1].ki = keyboardInput[1];


keyboardInput[0].wVk = 0x10; // Virtual-Key code for the 'shift' key.
keyboardInput[0].wScan = 0x2A; // Scan code for the 'shift' key.

inputArray[0].type = INPUT_KEYBOARD;
inputArray[0].ki = keyboardInput[0];

// Enter '~' (shift + '`~' key)
result = SendInput(2, inputArray, sizeof(tagINPUT));
errCode = GetLastError();

// Enter '`'
result = SendInput(1, &inputArray[1], sizeof(tagINPUT));
errCode = GetLastError();

Если вы хотите ввести эти два символа, SendMessage также может сделать это ( аналогичная проблема ):

LPCWSTR Target_window_Name = TEXT("Untitled - Notepad"); //<- Has to match window name
HWND hWindowHandle = FindWindow(NULL, Target_window_Name);
HWND EditClass = FindWindowEx(hWindowHandle, NULL, L"Edit", NULL);


SendMessage(EditClass, WM_KEYDOWN, 0xC0, 0x002C0001); //VK_OEM_3 0xC0
SendMessage(EditClass, WM_CHAR, 0x7E, 0x002C0001); //~
SendMessage(EditClass, WM_KEYUP, 0xC0, 0xC02C0001);

SendMessage(EditClass, WM_KEYDOWN, 0xC0, 0x002C0001); //VK_OEM_3 0xC0
SendMessage(EditClass, WM_CHAR, 0x60, 0x002C0001); //`
SendMessage(EditClass, WM_KEYUP, 0xC0, 0xC02C0001);

Ссылки: " SendInput " " SendMessage"

Для получения кода сканирования вы можете выполнить поиск" Спецификация кода сканирования клавиатуры - Microsoft ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...