파이썬 프로그램 실행시 나타나는 콘솔창에 입력시 한영 전환키 안 눌러도 기본적으로 한글이 입력되도록 할 수 있나요.

조회수 2132회

제가 파이썬 프로그램을 하나 만들었는데, 실행하면 콘솔창이 뜨면서 데이터를 몇 개 입력하면 결과가 나오는 프로그램입니다.

그런데 입력하는 데이터가 모두 한글로 입력하는 것이라서, 키보드에서 한영 전환키를 눌러 한글로 전환하지 않고 바로 한글로 입력하면 좋겠는데 콘솔창 입력 기본 설정을 한글로 하는 것이 가능한지요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 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))
    
    #한 > 영
    if get_hanguel_state() == 1: #1 일경우 vk_key : 0x15(한글키)가 활성화
        change_state() #한글키 누르고(key_press) , 때기(release)
    
    test = raw_input() 
    
    #영 > 한
    if get_hanguel_state() == 0: #0 일경우 vk_key : 0x15(한글키)가 비활성화
        change_state() #한글키 누르고(key_press) , 때기(release)
    
    test = raw_input() 
    
    
    #getkeystate : https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeystate
    #sendinput : https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput
    #code : https://gist.github.com/Aniruddha-Tapas/1627257344780e5429b10bc92eb2f52a
    

    win32api 를 이용한 키보드 상태 확인 후. 해당 조건에 맞게... 설정하는법입니다.

    관련되어서는 링크 참고해주세요

  • 실행해 보니 잘 되네요. 감사합니다. ^

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)