Reversing/Game Hack

win32API - GDI

GDI(Graphics Device Interface) : 윈도우에서 그래픽 작업 처리를 위해 제공하는 기본 graphic API

acase WM_PAINT: {
        RECT rect;
        RECT rect2;
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        SetTextColor(hdc, RGB(0xFF, 0x00, 0x00));
        rect.left = 10;
        rect.top = 10;
        rect2.left = 10;
        rect2.top = 30;
        DrawText(hdc, L"Hello Win Gdi World!", -1, &rect, DT_SINGLELINE | DT_NOCLIP);
        DrawText(hdc, L"Hello Win Gdi 2!", -1, &rect2, DT_SINGLELINE | DT_NOCLIP);
        EndPaint(hWnd, &ps);
        break;
    }

콜백함수에 위 내용을 추가해 주었다.

  • HDC(Handle to Device Context) : Device Context의 핸들을 지정한다.

    • BeginPaint 함수 : hWnd과 PAINTSTRUCT을 인자로 device Context 핸들을 반환한다.
    • PAINTSTRUCT : 해당 구조체는 painting 동작에 대한 정보를 가지고 있는 구조체.
  • SetTextColor : hdc와 색상 코드를 인자로 하여 실행되며, 해당 핸들을 사용하는 함수들의 텍스트 색상을 변경하는 역할을 한다.

  • DrawText 함수 : 이름 그대로 텍스트를 그리는 동작을 한다.

    • 세번째 인자는 문자열의 길이를 지정하는데, -1이 넘어갈 경우 마지막 null 문자까지 포함하여 자동으로 길이를 계산한다.

    • 네번째 인자로 넘어갈 건 사각형 RECT 구조체의 포인터. 중요한건 아니다.

      • rect 구조체의 가로-세로 좌표를 각각 지정해 줄 수 있다.
    • 다섯번째 인자로 플래그 옵션을 지정할 수 있다.

      • DT_SINGLELINE : 모든 텍스트를 한줄로 출력
      • DT_NOCLIP : 화면 밖을 벗어나는 텍스트도 출력함. - 이 플래그가 지정되면 함수 동작이 약간 더 빨라진다.
    • EndPaint는 Beginpaint가 붙들어놨던 device context를 할당 해제하는 역할을 한다. 해제 전까지는 해당 hdc를 사용하는 다른 동작이 불가능할것 같지만, 꼭 그런건 아닌듯.

      실행시

    • case WM_CLOSE 추가해서 PostQuitMessage(0) 안해주면 백그라운드에서 프로세스가 계속 도므로 꼭 추가하자.