USER32.dll은 창 관리, 입력 처리, UI 컨트롤 및 구성 요소, 대화 상자 및 메뉴, 그래픽 및 페인팅, 사용자 상호 작용 등 필수 기능을 제공합니다.
TranslateMessage
TranslateMessage 함수는 가상 키 메시지를 문자 메시지로 변환하는 Windows API 함수입니다. 이 함수는 일반적으로 Windows 응용 프로그램의 메시지 루프에서 키보드 입력을 처리하는 데 사용됩니다.
BOOL TranslateMessage(
[in] const MSG *lpMsg
);
파라미터
MSG* 인수는 GetMessage 또는 PeekMessage 함수를 사용하여 호출 스레드의 메시지 큐에서 검색된 메시지 정보를 포함하는 MSG 구조에 대한 포인터입니다.
[in] lpMsg
Type:
const MSG*
Field:
hwnd - 메시지가 연결된 창에 대한 핸들입니다.
message - WM_KEYDOWN 또는 WM_KEYUP과 같은 메시지 식별자입니다.
wParam - 메시지에 대한 추가 정보. 키보드 메시지의 경우 일반적으로 누르거나 놓은 키의 가상 키 코드를 포함합니다.
lParam - 메시지에 대한 추가 정보. 키보드 메시지의 경우 키가 이전에 눌렸는지 여부, ALT 키가 눌렸는지 여부와 같은 키 이벤트의 다양한 측면을 나타내는 플래그가 포함되어 있습니다.
반환값
Type: BOOL 이 함수의 반환값의 타입은 BOOL이며 0이아닌 값을 반환 했을 경우에는 True고 0을 반환한다면 False다.
0이 아닌 값(TRUE): 함수가 메시지를 성공적으로 옮기면 0이 아닌 값을 반환합니다.
이것은 일반적으로 TranslateMessage 함수가 문자에 해당하는 가상 키 메시지(예: WM_KEYDOWN 또는 WM_SYSKEYDOWN)를 수신하고 이 메시지를 MSG(예: WM_CHAR 또는 WM_SYSCHAR).
옮기면 MSG는 호출 스레드의 메시지 큐에 다시 게시됩니다.
0(FALSE): 함수가 메시지를 옮기지 않거나 오류가 발생하면 0을 반환합니다.
이는 함수가 가상 키 메시지가 아닌 메시지를 수신하거나 가상 키 메시지가 문자에 해당하지 않는 경우에 발생할 수 있습니다.
이 경우 MSG가 생성되지 않으며 원본 MSG가 변경되지 않은 상태로 유지됩니다.
함수 예제
이 함수를 사용하는 예제는 아래와 같다.
; MSG msg;
sub rsp,28h
; while (GetMessage(&msg, NULL, 0, 0)) {
call GetMessageA
test eax,eax
je exit_message_loop
; TranslateMessage(&msg);
lea rcx,[rsp+20h]
call TranslateMessage
; DispatchMessage(&msg);
lea rcx,[rsp+20h]
call DispatchMessageA
jmp start_message_loop
; }
exit_message_loop:
mov eax,dword ptr [rsp+20h]
위 예제는 TranslateMessage가 사용될때 같이 사용되는 함수들의 예제입니다.
이 어셈블리 코드 스니펫은 메시지 루프의 관련 부분을 보여줍니다.
GetMessage, TranslateMessage 및 DispatchMessage 함수는 루프 돌면서 계속 호출됩니다.
루프는 GetMessage가 0을 반환하 여 WM_QUIT 메시지가 수신되었음을 나타낼 때까지 계속됩니다.