Определение языка раскладки клавиатуры в реальном времени или как поставить вопросительный знак?
Не получается определить язык раскладки клавиатуры в реальном времени на Python3.
Суть проблемы заключается в том, что после запуска, программой определяется только та раскладка, которая была установлена в системе при старте программы. Необходимо менять раскладку в режиме реального времени. Ниже представлен код, как это реализовано сейчас. Полноценного ответа на данный вопрос или же решения в интернете не нашел.
Пара слов о том, как это должно работать:
- После определённой команды определяем раскладку
- Если раскладка русская, переключаем язык на английский
- Эмулируем печать вопросительного знака (комбинация shift+?)
- Результат: ?
Как это работает сейчас:
- Получаем команду, определяется язык раскладки на старте программы
- Пользователь изменил язык раскладки после запуска программы на русский
- Эмулируем печать вопросительного знака (комбинация shift+?)
- (тут раскладка должна переключиться на английскую)
- Вместо вопросительного знака в результате получаем: , (запятую)
import keyboard
import win32api
import win32gui
# Эмулируем нажатие определённых клавиш
# ---------------------------------------------------------
def keyboard_press_key(key):
print("Нажатые клавиши: " + key)
keyboard.press_and_release(key)
# Переключение раскладки клавиатуры
# ---------------------------------------------------------
def setCyrillicLayout():
window_handle = win32gui.GetForegroundWindow()
result = win32api.SendMessage(window_handle, 0x0050, 0, 0x04190419)
return result
def setEngLayout():
window_handle = win32gui.GetForegroundWindow()
result = win32api.SendMessage(window_handle, 0x0050, 0, 0x04090409)
return result
# Определяем раскладку
# ---------------------------------------------------------
def check_keyboard_lang(lang):
if lang == 68748313:
k_l = "rus"
elif lang == 67699721:
k_l = "en"
return k_l
# Получаем раскладку
# ---------------------------------------------------------
lang = win32api.GetKeyboardLayout()
current_lang = check_keyboard_lang(lang) # возвращает rus или en
# Дальнейшие действия
# ---------------------------------------------------------
if current_lang == "rus":
setEngLayout()
# Эмулируем нажатие клавиш
keyboard_press_key("shift+?")