Форум сайта python.su
Добрый день.
меняю раскладку клавиатуры. но программа всё равно воспринимает предыдущее состояние, при котором она была запущена. как сделать так, чтобы обновилась информация по раскладки клавиатуры в действии программы
import ctypes import keyboard as kb def get_layout(): u = ctypes.windll.LoadLibrary("user32.dll") pf = getattr(u, "GetKeyboardLayout") if hex(pf(0)) == '0x4190419': return 'ru' if hex(pf(0)) == '0x4090409': return 'en' ruen="" def ichange(): ruen=get_layout() if ruen=="en" : kb.press_and_release('alt + shift') def istatus(): ruen=get_layout() print (ruen) def imain(): istatus() ichange() istatus() imain()
Отредактировано Freedom83 (Апрель 27, 2022 10:53:53)
Офлайн
import pyautogui as p p.hotkey('shift', 'alt')
Офлайн
xam1816результат
Офлайн
ruen="" def ichange(): ruen=get_layout() if ruen=="en" : kb.press_and_release('alt + shift') def istatus(): ruen=get_layout() print (ruen)
def get_layout(): u = ctypes.windll.LoadLibrary("user32.dll") pf = getattr(u, "GetKeyboardLayout") if hex(pf(0)) == '0x4190419': return 'ru' if hex(pf(0)) == '0x4090409': return 'en'
kb.press_and_release('alt + shift')
def set_ru(): if get_layout() == 'en': kb.press_and_release('alt + shift')
def set_en(): if get_layout() == 'ru': kb.press_and_release('alt + shift')
def test(): set_en() print(get_layout()) set_ru() print(get_layout()) set_ru() print(get_layout()) set_en() print(get_layout())
import ctypes import keyboard as kb def get_layout(): u = ctypes.windll.LoadLibrary("user32.dll") pf = getattr(u, "GetKeyboardLayout") if hex(pf(0)) == '0x4190419': return 'ru' if hex(pf(0)) == '0x4090409': return 'en' def set_ru(): if get_layout() == 'en': kb.press_and_release('alt + shift') def set_en(): if get_layout() == 'ru': kb.press_and_release('alt + shift') def test(): set_en() print(get_layout()) set_ru() print(get_layout()) set_ru() print(get_layout()) set_en() print(get_layout()) test()
import subprocess import pyautogui as p def get_layout(): try: import ctypes # windows u = ctypes.windll.LoadLibrary("user32.dll") pf = getattr(u, "GetKeyboardLayout") if hex(pf(0)) == '0x4190419': return 'ru' if hex(pf(0)) == '0x4090409': return 'en' except: # linux pr = subprocess.Popen("xset -q|grep LED| awk '{ print $10 }'", stdout=subprocess.PIPE, shell=True) data = pr.communicate()[0].decode().strip() if data == '00001004': return "ru" if data == '00000000': return "en" def set_ru(): if get_layout() == 'en': p.hotkey('shift', 'alt') def set_en(): if get_layout() == 'ru': p.hotkey('shift', 'alt') def test(): set_en() print(get_layout()) set_ru() print(get_layout()) set_ru() print(get_layout()) set_en() print(get_layout()) set_en() print(get_layout()) test()
Отредактировано xam1816 (Апрель 27, 2022 22:42:37)
Офлайн
xam1816
import subprocess import pyautogui as p import ctypes # windows u = ctypes.windll.LoadLibrary("user32.dll") pf = getattr(u, "GetKeyboardLayout") if hex(pf(0)) == '0x4190419': ruen='ru' if hex(pf(0)) == '0x4090409': ruen='en' print(ruen) if ruen== 'en': p.hotkey('shift', 'alt') print(ruen)
Отредактировано Freedom83 (Апрель 29, 2022 09:39:28)
Офлайн
Freedom83именно в этом отрывке
переписал вообще без функций, результат не изменился.
print(ruen) if ruen== 'en': p.hotkey('shift', 'alt') print(ruen)
Офлайн
xam1816справа, где часы
Офлайн