def script_sayCurKeyboardLanguage(self, gesture): import winUser import scriptHandler import ctypes import languageHandler # Getting the handle of the foreground window. curWindow = winUser.getForegroundWindow() # Getting the threadID. threadID = winUser.getWindowThreadProcessID(curWindow)[1] # Getting the keyboard layout iD. klID = winUser.getKeyboardLayout(threadID) # Extract language ID from klID. lID = klID & (2**16 - 1) # Getting the current keyboard language description from ctypes.windll.kernel32.GetLocaleInfoW. # Some language IDs are not available in the local.windows_locale dictionary, it is best to search their description directly in Windows itself buf = ctypes.create_unicode_buffer(1024) res = ctypes.windll.kernel32.GetLocaleInfoW( lID, languageHandler.LOCALE_SLANGUAGE, buf, 1024) desc = buf.value defaultOsl = locale.getdefaultlocale()[0] repeatCount = scriptHandler.getLastScriptRepeatCount() if repeatCount == 0: ui.message(desc) else: ui.message(languageHandler.getLanguageDescription(defaultOsl))
def getKeyboardLayout(): curWindow = winUser.getForegroundWindow() threadID = winUser.getWindowThreadProcessID(curWindow)[1] klID = winUser.getKeyboardLayout(threadID) lID = klID & (2**16 - 1) try: localeName = locale.windows_locale[lID] except KeyError: localeName = None return localeName
def getKeyboardLanguage(self): # Code borrowed from sayCurrentKeyboardLanguage add-on, by Abdel: # https://github.com/abdel792/sayCurrentKeyboardLanguage # Getting the handle of the foreground window. curWindow = winUser.getForegroundWindow() # Getting the threadID. threadID = winUser.getWindowThreadProcessID(curWindow)[1] # Getting the keyboard layout iD. klID = winUser.getKeyboardLayout(threadID) # Extract language ID from klID. lID = klID & (2**16 - 1) return lID
def isArabicKeyboardLayout(): """ Test if the keyboard layout is Arabic to avoid an error reported by a user. """ import locale curWindow = winUser.getForegroundWindow() threadID = winUser.getWindowThreadProcessID(curWindow)[1] klID = winUser.getKeyboardLayout(threadID) lID = klID & (2**16 - 1) try: localeName = locale.windows_locale[lID] except KeyError: localeName = None if localeName and localeName.startswith("ar_"): return True return False