'2014 개인기록/으으리 리버싱'에 해당되는 글 2건

  1. [02일차] Win32 API 이해 2014.06.16
  2. [02일차] Win32 API 프로그램 종료 2014.06.15

[02일차] Win32 API 이해[02일차] Win32 API 이해

Posted at 2014. 6. 16. 01:29 | Posted in 2014 개인기록/으으리 리버싱

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
// 윈도우 이름 및 타이틀바에 등록할 문자열
LPCTSTR lpszClass = TEXT("First");

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)GetStockObject(WHITE_BRUSH);
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = 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);

	// 사용자가 종료하기 전까지 반복해서 메세지 처리를 호출한다.
	while (GetMessage(&Message, NULL, 0, 0))
	{
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	
	return (int)Message.wParam;
}

// 여기서 실제로 메시지를 처리한다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	switch (iMessage)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}

	// 프로그래머가 처리하지 않은 나머지 동작을 기본처리로 넘긴다.
	return DefWindowProc(hWnd, iMessage, wParam, lParam);
}
오늘은 두번째 수업 시간이다.

'2014 개인기록 > 으으리 리버싱' 카테고리의 다른 글

[02일차] Win32 API 프로그램 종료  (0) 2014.06.15
//

[02일차] Win32 API 프로그램 종료[02일차] Win32 API 프로그램 종료

Posted at 2014. 6. 15. 20:10 | Posted in 2014 개인기록/으으리 리버싱
#include <stdio.h>
#include <windows.h>

int main(void)
{
	HWND hWnd = FindWindow(NULL, "계산기");

	if(hWnd) SendMessage(hWnd, WM_CLOSE, 0, 0);

	return 0;
}

오늘 Win32 API 수업 시간에 배운 내용이다. 계산기 프로세스를 찾아 종료 시그널을 보내는 프로그램이다. 실습을 하면서 WM_DESTROY 시그널을 보내도 종료가 되지 않아 너무 이상했다. 집에 와서 테스트해보니 WM_CLOSE 시그널을 만나야 종료가 된다. 생각해보면 WM_DESTROY 시그널을 만나도 죽을 것 같지만 실제로는 WM_CLOSE 시그널을 만나야 한다.

'2014 개인기록 > 으으리 리버싱' 카테고리의 다른 글

[02일차] Win32 API 이해  (0) 2014.06.16
//