Windows/Windows API

Message Cracker

aucd29 2013. 10. 1. 19:00
#include "defime.h"

HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass = TEXT("DefIme"); // change unicode

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
     ,LPSTR lpszCmdParam,int nCmdShow)
{
     HWND hWnd;
     MSG Message;
     WNDCLASS WndClass;
     g_hInst=hInstance;

     WndClass.cbClsExtra=0;
     WndClass.cbWndExtra=0;
     WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
     WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
     WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
     WndClass.hInstance=hInstance;
     WndClass.lpfnWndProc=(WNDPROC)WndProc;
     WndClass.lpszClassName=lpszClass;
     WndClass.lpszMenuName=NULL;
     WndClass.style=CS_HREDRAW | CS_VREDRAW;
     RegisterClass(&WndClass);

     hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
         CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
         NULL,(HMENU)NULL,hInstance,NULL);
     ShowWindow(hWnd,nCmdShow);
     hWndMain=hWnd;

     while(GetMessage(&Message,0,0,0)) {
         TranslateMessage(&Message);
         DispatchMessage(&Message);
     }

     return (int)Message.wParam;
}

TCHAR *buf;

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    switch(iMessage)
    {
        HANDLE_MSG(hWnd, WM_CREATE, OnCreate);
        HANDLE_MSG(hWnd, WM_DESTROY, OnDestroy);
        HANDLE_MSG(hWnd, WM_CHAR, OnChar);
        HANDLE_MSG(hWnd, WM_PAINT, OnPaint);
    }
    
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
    buf=(TCHAR *)malloc(65536);
    memset(buf,0,65536);

    return TRUE;
}

void OnChar(HWND hWnd, TCHAR ch, int cRepeat)
{
    int len;
    len=lstrlen(buf);
    buf[len] =ch;
    buf[len+1]=0;
    InvalidateRect(hWnd,NULL,TRUE);
}

void OnPaint(HWND hWnd)
{
    HDC hdc;
    PAINTSTRUCT ps;
    hdc=BeginPaint(hWnd,&ps);
    TextOut(hdc,0,0,buf,lstrlen(buf));
    EndPaint(hWnd,&ps);
}

void OnDestroy(HWND hWnd)
{
    PostQuitMessage(0);
    free(buf);
}

[code]header[/code]
#include <windows.h>
#include <windowsx.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
void OnChar(HWND hWnd, TCHAR ch, int cRepeat);
void OnPaint(HWND hWnd);
void OnDestroy(HWND hWnd);