강좌와 팁

Caps Lock 키의 상태 조사 및 변경 날짜:2022-3-28 1:55:19 조회수:606
작성자 : daypark
포인트 : 1200
가입일 : 2020-02-14 10:42:05
방문횟수 : 253
글 177개, 댓글 29개
소개 : 자기소개를 입력하십시오.
작성글 보기
쪽지 보내기
Caps Lock 키는 일반적으로 사용자가 직접 토글하며 사용하는 키이지만 코드에서 의도적으로 조사하거나 직접 바꿀 수도 있다.
반드시 대문자로 입력해야 하는 제품 코드나 대문자를 금지해야 하는 경우 등이다.
조사할 때는 GetKeyState(VK_CAPITAL)을 호출한 후 최하위 비트가 1인지만 보면 된다. 최하위 비트는 토글키의 현재 상태를 조사하는데 비해 최상위 비트는 지금 눌러져 있는지 조사한다. 
이 둘의 차이를 잘 구분해야 하는데 최상위 비트는 지금 눌러져 있는지 보는 것이고 최하위 비트는 전에 눌러 놓아 대문자 고정 상태인지 조사하는 것이다. 즉, 지금 누르고 있느냐, 전에 눌러 놓았느냐의 차이이다. 
변경할 때는 keybd_event(VK_CAPITAL, 0, 0, 0) 호출로 누른 후 keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0) 호출로 다시 뗀다. 사옹자 대신 키를 눌러주는 것이다. 
어찌 보면 원론적으로 간단한 방법이다. 소스 코드는 다음과 같다. 

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    TCHAR str[128];

    switch (iMessage) {
    case WM_CREATE:
        hWndMain = hWnd;
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // 현재 상태 조사.
        if ((GetKeyState(VK_CAPITAL) && 1) == 0) {
            lstrcpy(str, TEXT("Caps Lock Off"));
        } else {
            lstrcpy(str, TEXT("Caps Lock On"));
        }
        TextOut(hdc, 10, 10, str, lstrlen(str));
        EndPaint(hWnd, &ps);
        return 0;
    case WM_LBUTTONDOWN:
        // 현재 상태 토글
        keybd_event(VK_CAPITAL, 0, 0, 0);
        keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);
        InvalidateRect(hWnd, NULL, TRUE);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

Win32 프로젝트를 만들고 소스 붙여 넣은 후 실행한다.
화면에 Caps Lock키의 현재 상태를 보여주고 마우스 버튼을 클릭하면 토글한다.
특정 상태로 강제 조정하려면 상태를 먼저 조사해 보고 원하는 상태가 아닐 경우 뒤집으면 된다. 
  吏묓쁽硫댁퐳嫄 湲덊깂룞留뚮궓썑湲 븘二쇱“湲덈Т꽌슫 룞씤泥쒖뿭븞留 異쒖옣씠留덉궗吏 | 愿묓솕臾 떎궡 뜲씠듃 | 留뚰솕 19 빞留뚰솕 빐븞룞留덉궗吏 諛붾굹굹紐곗꽦씤슜뭹 異쒖옣꽦씤留덉궗吏 | 痢좊굹뜲룞씤吏 | 愿묒<肄쒓구꺏 쓽二쇰줈梨꾪똿 꽌珥덉퐳嫄몄꺏 씤泥쒕怨듭썝뿭븞留 媛곷턿硫댁븞留 겙 뼱癒몃땲 꽦씤留뚰솕 耳寃붽린援 뿬옄굹泥

寃⑥슱以鍮 뤌吏媛덈퉬 븣諛붽由 | 솕옣뭹뜒썑 | kb援誘쇱뭅뱶 異 썑湲 李쎌뾽 옱뀒겕,鍮꾩긽湲 異 뼱뵆,솚 異 蹂댁씠뒪 뵾떛 삁鍮꾨쭣洹몃옩 젙愿 룷빆留쏆쭛 궗쉶珥덈뀈깮 옱뀒겕 ppt쐯30 二쇰遺뾽쐯옱깮븣諛붾뾽 몦궛룞留쏆쭛 28媛쒖썡븘湲 留뚰솕 19 뿬룞깮뙆씪떎씠뒪 1 꽦씤留뚰솕 썑 궃寃쎈ℓ M紐⑤ 4

목록보기 삭제 수정 신고 스크랩


로그인하셔야 댓글을 달 수 있습니다.