Определение языка раскладки клавиатуры в реальном времени или как поставить вопросительный знак?

Не получается определить язык раскладки клавиатуры в реальном времени на 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+?")

Ответы (0 шт):