새소식

공부/dll

USER32.dll TranslateMessage Function

  • -

TranslateMessage Function


USER32.dll


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 메시지가 수신되었음을 나타낼 때까지 계속됩니다.

 

'공부 > dll' 카테고리의 다른 글

USER32.dll GetDlgItemTextA Function  (0) 2023.03.16
USER32.dll GetMessageA Function  (0) 2023.03.16
USER32.dll DispatchMessageA Function  (0) 2023.03.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.