import ctypes import time from ctypes import wintypes wintypes.ULONG_PTR = wintypes.WPARAM hllDll = ctypes.WinDLL("User32.dll", use_last_error=True) VK_HANGUEL = 0x15 class MOUSEINPUT(ctypes.Structure): _fields_ = (("dx", wintypes.LONG), ("dy", wintypes.LONG), ("mouseData", wintypes.DWORD), ("dwFlags", wintypes.DWORD), ("time", wintypes.DWORD), ("dwExtraInfo", wintypes.ULONG_PTR)) class HARDWAREINPUT(ctypes.Structure): _fields_ = (("uMsg", wintypes.DWORD), ("wParamL", wintypes.WORD), ("wParamH", wintypes.WORD)) class KEYBDINPUT(ctypes.Structure): _fields_ = (("wVk", wintypes.WORD), ("wScan", wintypes.WORD), ("dwFlags", wintypes.DWORD), ("time", wintypes.DWORD), ("dwExtraInfo", wintypes.ULONG_PTR)) class INPUT(ctypes.Structure): class _INPUT(ctypes.Union): _fields_ = (("ki", KEYBDINPUT), ("mi", MOUSEINPUT), ("hi", HARDWAREINPUT)) _anonymous_ = ("_input",) _fields_ = (("type", wintypes.DWORD), ("_input", _INPUT)) def get_hanguel_state(): # 현재 한/영 전환 키의 상태를 확인하는 함수 return hllDll.GetKeyState(VK_HANGUEL) def change_state(): # 한/영 키 전환 함수 x = INPUT(type=1 ,ki=KEYBDINPUT(wVk=VK_HANGUEL)) y = INPUT(type=1, ki=KEYBDINPUT(wVk=VK_HANGUEL,dwFlags=2)) hllDll.SendInput(1, ctypes.byref(x), ctypes.sizeof(x)) time.sleep(0.05) hllDll.SendInput(1, ctypes.byref(y), ctypes.sizeof(y)) def set_keyboard_language(target_lang): """ 한글 또는 영어로 키보드 상태를 전환하는 함수. Args: target_lang (str): 'kor'이면 한글로 전환, 'eng'이면 영어로 전환. """ current_state = get_hanguel_state() if target_lang == 'kor' and current_state == 0: # 현재 영어인 경우 한글로 전환 change_state() print("키보드를 한글로 전환했습니다.") elif target_lang == 'eng' and current_state == 1: # 현재 한글인 경우 영어로 전환 change_state() print("키보드를 영어로 전환했습니다.") else: # 이미 원하는 상태인 경우 print(f"이미 {target_lang} 상태입니다.") # # 사용 예시 # set_keyboard_language('kor') # 한글로 전환 # set_keyboard_language('eng') # 영어로 전환