¿

ٸ μ IME ¥:2022-2-22 7:54:53 ȸ:569
ۼ : daypark
Ʈ : 1200
: 2020-02-14 10:42:05
湮Ƚ : 253
177, 29
Ұ : ڱҰ ԷϽʽÿ.
ۼ

IME Է ǹϴµ ؼ ѱ̳ ̳Դϴ.
帶 IME ؽƮ µ Ҽ 带 ϴ.
μ UI 尡 ִ Ư 츦 α׷ IME 尡 .
ڰ ѱŰ Shift+Space 带 ٲ㰡 µ δ α׷ 带 ؾ 찡 ֽϴ.
ݵ Է¹޾ƾ Ѵٰų ѱ۷ Է¹
׷ ڽ IME 带 ϰų ϴ մϴ.
ݸ ٸ μ 带 ϰų ϴ ġ ʽϴ.
̷ ϴ. 

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass = TEXT("IMEControl");

int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
    , _In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
    HWND hWnd;
    MSG Message;
    WNDCLASS WndClass;
    g_hInst = hInstance;

    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = lpszClass;
    WndClass.lpszMenuName = NULL;
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&WndClass);

    hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 600, 400,
        NULL, (HMENU)NULL, hInstance, NULL);
    ShowWindow(hWnd, nCmdShow);

    while (GetMessage(&Message, NULL, 0, 0)) {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }
    return (int)Message.wParam;
}

#include <imm.h>
#pragma comment(lib, "imm32.lib")

TCHAR stNotepad[256] = L"޸ ƴ";
TCHAR stForeWnd[256] = L"Ȱ ";
HWND hNotepad = NULL;
HWND hForeWnd = NULL;
enum { ENG, HAN };
enum { N_TOGGLE, N_HAN, N_ENG, F_TOGGLE, F_HAN, F_ENG };

// Ư IME 带 Ѵ.
int GetWndIMEMode(HWND hWnd)
{
    if (hWnd == NULL) return -1;
    HWND hIme = ImmGetDefaultIMEWnd(hWnd);
    if (hIme == NULL) return -1;
    // 5 ǹ̸ . 
    return (int)SendMessage(hIme, WM_IME_CONTROL, 5, NULL);
}

// Ư IME .
void SetWndIMEMode(HWND hWnd, int imeMode)
{
    if (hWnd == NULL) return;
    int nowMode = GetWndIMEMode(hWnd);
    if (nowMode != imeMode) {
        SendMessage(hWnd, WM_KEYDOWN, VK_HANGUL, 0);
        SendMessage(hWnd, WM_KEYUP, VK_HANGUL, 0);
    }
}

// IME Ű ̺Ʈ . ׻ Ŀ Ȱ ̴.
void ToggleIMEMode()
{
    keybd_event(VK_HANGUL, 0, 0, 0);
    keybd_event(VK_HANGUL, 0, KEYEVENTF_KEYUP, 0);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    DWORD imeMode;
    TCHAR cap[256];

    switch (iMessage) {
    case WM_CREATE:
        hWndMain = hWnd;
        SetTimer(hWnd, 1, 1000, NULL);
        CreateWindow(TEXT("button"), TEXT(""), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 10, 30, 90, 25, hWnd, (HMENU)N_TOGGLE, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("ѱ"), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 110, 30, 90, 25, hWnd, (HMENU)N_HAN, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT(""), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 210, 30, 90, 25, hWnd, (HMENU)N_ENG, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("2 "), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 10, 130, 90, 25, hWnd, (HMENU)F_TOGGLE, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("2 ѱ"), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 110, 130, 90, 25, hWnd, (HMENU)F_HAN, g_hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("2 "), WS_CHILD | WS_VISIBLE |
            BS_PUSHBUTTON, 210, 130, 90, 25, hWnd, (HMENU)F_ENG, g_hInst, NULL);
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        TextOut(hdc, 10, 10, stNotepad, lstrlen(stNotepad));
        TextOut(hdc, 10, 110, stForeWnd, lstrlen(stForeWnd));
        EndPaint(hWnd, &ps);
        return 0;
    case WM_COMMAND:
        switch (LOWORD(wParam)) {
        case N_TOGGLE:
            SetWndIMEMode(hNotepad, GetWndIMEMode(hNotepad) == HAN ? ENG:HAN);
            break;
        case N_HAN:
            SetWndIMEMode(hNotepad, HAN);
            break;
        case N_ENG:
            SetWndIMEMode(hNotepad, ENG);
            break;
        case F_TOGGLE:
            SetTimer(hWnd, F_TOGGLE, 2000, NULL);
            break;
        case F_HAN:
            SetTimer(hWnd, F_HAN, 2000, NULL);
            break;
        case F_ENG:
            SetTimer(hWnd, F_ENG, 2000, NULL);
            break;
        }
        return 0;
    case WM_TIMER:
        switch (wParam) {
        case 1:
            hNotepad = FindWindow(L"NotePad", NULL);
            if (hNotepad == NULL) {
                lstrcpy(stNotepad, L"޸ ƴ");
            } else {
                imeMode = GetWndIMEMode(hNotepad);
                wsprintf(stNotepad, L"޸ : %s", imeMode == 1 ? L"ѱ" : L"");
            }
            hForeWnd = GetForegroundWindow();
            if (hForeWnd == NULL) {
                lstrcpy(stForeWnd, L"Ȱ 츦 ã ");
            } else {
                imeMode = GetWndIMEMode(hForeWnd);
                GetWindowText(hForeWnd, cap, 256);
                wsprintf(stForeWnd, L"Ȱ (%s) : %s", cap, imeMode == 1 ? L"ѱ" : L"");
            }
            InvalidateRect(hWnd, NULL, TRUE);
            break;
        case F_TOGGLE:
            // 2 Ȱ IME . Ŀ ű ֵ 2 ð ش.
            KillTimer(hWnd, F_TOGGLE);
            ToggleIMEMode();
            break;
        case F_HAN:
            KillTimer(hWnd, F_HAN);
            hForeWnd = GetForegroundWindow();
            if (hForeWnd != NULL) {
                imeMode = GetWndIMEMode(hForeWnd);
                if (imeMode == 0) {
                    ToggleIMEMode();
                }
            }
            break;
        case F_ENG:
            KillTimer(hWnd, F_ENG);
            hForeWnd = GetForegroundWindow();
            if (hForeWnd != NULL) {
                imeMode = GetWndIMEMode(hForeWnd);
                if (imeMode == 1) {
                    ToggleIMEMode();
                }
            }
            break;
        }
        return 0;
    case WM_DESTROY:
        KillTimer(hWnd, 1);
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

޸ Ȱ 쿡 IME 带 ϴ ڵԴϴ.
WM_IME_CONTROL ޽ 5 ˴ϴ.
5 ۸ؼ ãƳ ǵ ü ǹ̴ 𸣰ھ.
ƹư ˴ϴ.

Ư IME 带 ϴ ã ߽ϴ. 
SendMessage VK_HANGUL Ű ٲ ʴ.
κ ʿѵ μ ̶ ׿.

Ȱ 带 ϴ ׳ մϴ. 
keydb_event Լ ýۿ VK_HANGUL Ű ˴ϴ.
Ű Ŀ ޵Ǿ 带 ٲٰ ˴ϴ.
, IME 带 մϴ.
Ư · ٲٰ ¸ ϴ ° ƴϸ ϸ ǰ. 



׽Ʈ 2 Ŀ Ȱ IME 带 Ǵ , ȯմϴ.
2 ð ư ׻ α׷ Ȱ ̱
ϴ Ŀ ű ð ִ ̴ϴ.
ϸ Űó IME 带 ǵ ϴ α׷ մϴ.
Ư IME 带 ϴ ã ߴµ ֽϴ.
ã ۷ ϵ ҰԿ.



 


  중화역안마 둔대동안마 인제읍안마 삼도이동채팅 오산콜걸샵 의정부출장만남 고양출장샵 질러쏭 느키도킷✓성인만화 대장✓경락마사지효과 양주역소개팅 lg웹하드 사이트 장곡동맛사지 장계면맛사지 포동콜걸 소개팅앱방 카게히나타피어나다 인주면안마 파주 여대생출장마사지 성인만화 강제 마계기사 잉그리드 2화

2살 혼혈아기 100일상대여 | 겨울코디 | 카카오뱅크 대출 연장 겨울니트담보평가토스부동산소액투자원금 테일러커피 용인카페 증권번호 투자목적 주식소액투자 대출세상✓인천맘✓주말알바 부수입만들기 | 고수익알바구합니다 | 부업 앱 투자비중 재택부업 방법 직장인부업 공짜채팅사이트 장실도촤 카시마 동인지 수영복 rmsu 보지다

Ϻ Ű ũ


αϼž ֽϴ.