새소식

공부/dll

USER32.dll GetMessageA Function

  • -

USER32.dll GetMessageA Function


USER32.dll


USER32.dll은 창 관리, 입력 처리, UI 컨트롤 및 구성 요소, 대화 상자 및 메뉴, 그래픽 및 페인팅, 사용자 상호 작용 등 필수 기능을 제공합니다. 

 

 

GetMessageA

 


GetMessageA는 USER32.dll 라이브러리에서 내보낸 Windows API 함수입니다. 

이 함수는 호출 스레드의 메시지 큐에서 메시지를 검색하며 일반적으로 Windows 애플리케이션의 메시지 루프에서 사용됩니다. 

함수 이름의 'A'는 ANSI 문자 집합을 사용함을 나타냅니다. 

GetMessageW라는 함수의 유니코드 버전도 있습니다.

 

BOOL GetMessageA(
  [out]          LPMSG lpMsg,
  [in, optional] HWND  hWnd,
  [in]           UINT  wMsgFilterMin,
  [in]           UINT  wMsgFilterMax
);

파라미터

총 4가지가 있으며 각각 파라미터에 대한 정보는 아래와 같다.

lpMsg: 메시지 정보를 수신하는 MSG 구조에 대한 포인터.
hWnd: 메시지를 검색할 창에 대한 핸들입니다. 창은 현재 스레드에 속해야 합니다. hWnd가 NULL이면 함수는 현재 스레드에 속한 모든 창에 대한 메시지를 검색합니다.
wMsgFilterMin: 검색할 가장 낮은 메시지 값의 정수 값입니다. 사용 가능한 모든 메시지를 검색하려면 '0'을 사용하십시오.
wMsgFilterMax: 검색할 가장 높은 메시지 값의 정수 값. 사용 가능한 모든 메시지를 검색하려면 '0'을 사용하십시오.

반환값

Type: BOOL

GetMessageA함수는 BOOL 값을 반환합니다.

함수가 WM_QUIT 이외의 메시지를 검색하는 경우 반환 값은 0이 아닙니다.

함수가 WM_QUIT 메시지를 검색하면 반환 값은 0입니다. 오류가 있는 경우 반환 값은 -1입니다.

오류가 발생한 경우 GetLastError 를 호출하여 오류에 대한 자세한 정보를 얻을 수 있습니다.


함수 예제

이 함수를 사용하는 예제는 아래와 같다.

MessageLoop:
    invoke GetMessageA, ADDR msg, NULL, 0, 0
    cmp eax, 0
    je ExitLoop
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessageA, ADDR msg
    jmp MessageLoop

위 예제는 TranslateMessage가 사용될때 같이 사용되는 함수들의 예제입니다.

위의 어셈블리 코드에서 메시지 루프는 GetMessageA를 사용하여 메시지를 검색하고 TranslateMessage를 사용하여 변환하고 DispatchMessageA를 사용하여 적절한 창 프로시저로 디스패치합니다. 

invoke GetMessageA, ADDR msg, NULL, 0, 0 행은 GetMessageA 함수 호출에 해당합니다.

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

USER32.dll GetDlgItemTextA Function  (0) 2023.03.16
USER32.dll DispatchMessageA Function  (0) 2023.03.16
USER32.dll TranslateMessage Function  (1) 2023.03.16
Contents

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

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