Я использовал SetWindowHook
, чтобы установить хук низкоуровневой клавиатуры для мгновенных глобальных горячих клавиш.Но когда я пытаюсь использовать горячие клавиши для таких букв, как ';' [], / ', он возвращает неправильные / ценные буквы.Например, когда я нажимаю запятую, она дает мне 1/4 знака.
Вот обратный вызов
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
char letter;
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
letter = (char)vkCode;
// converts letters to capitals
if (char.IsLetter(letter) == true)
{
if ((((ushort)GetKeyState(0x14)) & 0xffff) != 0)
{
letter = char.ToUpper(letter);
if (GetAsyncKeyState(((int)VirtualKeys.Shift)) != 0)
letter = char.ToLower(letter);
}
else if (GetAsyncKeyState(((int)VirtualKeys.Shift)) != 0)
{
letter = char.ToUpper(letter);
}
else
{
letter = char.ToLower(letter);
}
}
logs.Add(letter);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Как получить горячие клавиши пунктуации, не сравнивая вручную каждое неверное значение?