Поток для определения языка или изменения Caps Lock срабатывает только в первый разPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Поток для определения языка или изменения Caps Lock срабатывает только в первый раз

Сообщение Anonymous »

Я пытаюсь создать программу, которая выдает объявление всякий раз, когда вы меняете язык на клавиатуре или меняете регистр.
У меня проблема в том, что она объявляет в запускается, а затем всякий раз, когда я меняю язык или нажимаю клавишу Caps Lock, сообщение больше не появляется.
Буду признателен за любую помощь или информацию.
import pyttsx3
import ctypes
import win32api
import threading
import time

# Initialize text-to-speech engine
engine = pyttsx3.init()

# Initialize global variables for current language and case
current_language = None
current_case_state = None

# Function to get the current keyboard layout
def get_keyboard_language():

try:
user32 = ctypes.WinDLL('user32', use_last_error=True)
curr_window = user32.GetForegroundWindow()
thread_id = user32.GetWindowThreadProcessId(curr_window, 0)
klid = user32.GetKeyboardLayout(thread_id)
language_id = klid & (2 ** 16 - 1)

# Language mapping based on primary language identifier
languages = {
0x0409: "English", # English (US)
0x0C0C: "French", # French (Canada)
0x0407: "German", # German (Germany)
0x0410: "Italian", # Italian (Italy)
0x0A0A: "Spanish", # Spanish (Spain)
0x0408: "Greek", # Greek (Greece)

# Add more language codes if needed
}

return languages.get(language_id, "Unknown")

except Exception as e:
print(f"Error in get_keyboard_language: {str(e)}")
return "Unknown"

# Function to check if caps lock is on
def is_capslock_on():
try:
return win32api.GetKeyState(0x14) == 1
except Exception as e:
print(f"Error in is_capslock_on: {str(e)}")
return False

# Function to announce the language and case

def announce_language_case():
global current_language, current_case_state
try:
while True:
language = get_keyboard_language()
case_state = is_capslock_on()
case = "uppercase" if case_state else "lowercase"

if language != current_language or case_state != current_case_state:

current_language = language
current_case_state = case_state
print(announcement) # For debugging purposes
engine.say(announcement)
engine.runAndWait()

time.sleep(0.1) # Check every 0.1 seconds

except Exception as e:
print(f"Error in announce_language_case: {str(e)}")

# Start a thread to announce language and case changes
thread = threading.Thread(target=announce_language_case)
thread.daemon = True
thread.start()

# Keep the main thread running
try:
while True:
time.sleep(1) # Keep the main thread alive

except KeyboardInterrupt:
print("Stopping...")


Подробнее здесь: https://stackoverflow.com/questions/787 ... first-time
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Определение того, включен ли Caps Lock
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Проверьте, нажата ли клавиша Shift/cmd/option/caps-lock в приложении iOS.
    Anonymous » » в форуме IOS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • SG Caps в раскладке клавиатуры Linux
    Anonymous » » в форуме Linux
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как обнаружить, если блокировка Caps уже активна? [дублировать]
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как обнаружить, если блокировка Caps уже активна? [дублировать]
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»