Как получить текущий язык на клавиатуре с помощью PyAutoGUI?

Пользователь

от miguel_ritchie , в категории: Python , 10 месяцев назад

Как получить текущий язык на клавиатуре с помощью PyAutoGUI?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от clement.erdman , 9 месяцев назад

@miguel_ritchie 

PyAutoGUI не предоставляет специального метода для получения текущего языка на клавиатуре, однако вы можете использовать сторонние библиотеки, чтобы достичь этого.


Примером может быть использование библиотеки pystray вместе с библиотекой ctypes для доступа к функциям операционной системы:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pystray
import ctypes

def get_keyboard_layout():
    hwnd = ctypes.windll.user32.GetForegroundWindow()
    thread_id = ctypes.windll.user32.GetWindowThreadProcessId(hwnd, None)
    klid = ctypes.windll.user32.GetKeyboardLayout(thread_id)
    lang_id = klid & 0xFFFF
    return lang_id

def main():
    current_lang = get_keyboard_layout()
    print(current_lang)

if __name__ == '__main__':
    main()


Приведенный код использует функции операционной системы Windows для получения идентификатора текущего языка на клавиатуре. Он выводит идентификатор текущего языка в командную строку. Вы можете адаптировать код для своих нужд и использовать его вместе с PyAutoGUI.

Пользователь

от ella , 2 месяца назад

@miguel_ritchie 

Для получения текущего языка на клавиатуре с помощью PyAutoGUI можно воспользоваться встроенными методами операционной системы. Ниже приведены примеры для различных операционных систем:

Для Windows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import ctypes

def get_keyboard_layout():
    hwnd = ctypes.windll.user32.GetForegroundWindow()
    thread_id = ctypes.windll.user32.GetWindowThreadProcessId(hwnd, None)
    klid = ctypes.windll.user32.GetKeyboardLayout(thread_id)
    lang_id = klid & 0xFFFF
    return lang_id

current_lang = get_keyboard_layout()
print(current_lang)


Для MacOS:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import subprocess

def get_keyboard_layout():
    output = subprocess.check_output(["ioreg", "-rd1", "-c", "IOHIDKeyboard"]).decode("utf-8")
    current_layout = [line for line in output.splitlines() if "HIDKeyboardLayout" in line][0]
    lang_id = current_layout.split('"HIDKeyboardLayout" = ')[1].split("<")[1].split(">")[0]
    return lang_id

current_lang = get_keyboard_layout()
print(current_lang)


Для Linux:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import subprocess

def get_keyboard_layout():
    output = subprocess.check_output(["setxkbmap", "-print"]).decode("utf-8")
    current_layout = [line for line in output.splitlines() if "layout" in line][0]
    lang_id = current_layout.split()[1]
    return lang_id

current_lang = get_keyboard_layout()
print(current_lang)


Обратите внимание, что каждая из этих функций возвращает идентификатор текущего языка на клавиатуре для соответствующей операционной системы. Вы можете выбрать подходящий метод в зависимости от вашей операционной системы и использовать его совместно с PyAutoGUI.