티스토리 뷰
#include <stdio.h> #include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int CALLBACK WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 윈도우를 등록 WNDCLASSA WndClass = { 0 }; WndClass.lpszClassName = "suspect"; // CreateWindowA의 첫 번째 인자에서 정해준 이름과 같아야함. WndClass.hInstance = hinstance; WndClass.lpfnWndProc = WndProc; // 응용 프로그램 메시지 큐에서 꺼내서 처리하는 과정을 프로그래머가 직접 만들어줘야 하는데 바로 이러한 기능을 하는 함수이다. WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); RegisterClassA(&WndClass); // 윈도우를 생성 CreateWindowA( //다른 프로세스를 부모윈도우로 하고 그 안에 자식으로 들어가려면 WS_CHILD를 넣어주어야 함. "suspect", // button과 edit 같이 정해준 형식 말고 프로그래머가 임의로 원하는 윈도우 모양을 만들려면 임의 값을 지정하고 RegisterClass 함수를 사용한다. "BirthDayDay", //WS_POPUP | WS_VISIBLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_BORDER, // WS_OVERLAPPEDWINDOW => 최대, 최소화, 시스템 메뉴를 가질 수 있는 형태. 0, // x좌표 0, // y좌표 100, // 넓이 100, // 높이 NULL, // 부모 윈도우 핸들 NULL, // 메뉴 hinstance, // 인스턴스 NULL ); MSG msg; while (GetMessageA(&msg,0,NULL,NULL)) // 메시지를 반복적으로 꺼낸다. 이 함수를 써야 메시지큐에서 메시지를 꺼낼 수가 있다. { DispatchMessageA(&msg); // 메시지가 올 때마다 꺼내서 아래 메시지 처리 함수가 호출될 수 있도록 Dispatch 해준다. } return 0; } LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) // 메시지가 올 때마다 함수처리할 수 있는 함수 { // 메시지가 발생할 때마다 이 함수가 호출 switch (uMsg) { case WM_LBUTTONDOWN: return 0; case WM_DESTROY: // 닫기 버튼을 눌렀을 때 PostQuitMessage(0); return 0; } return DefWindowProcA(hwnd, uMsg, wParam, lParam); //기본적인 메시지(최대, 최소화 등)를 윈도우가 모두 해주는 함수 }
윈도우 창이라는 개념에 대해서 알아야 하고 윈도우 창이 메시지 기반으로 동작한다는 것 알아야 된다.
마우스, 키보드, 버튼 입력 등은 운영체제 내부에 시스템 메시지 큐에 쌓이게 된다. 이런 메시지들이 쌓여서 각각의 프로그램에 있는 윈도우 창들이 윈도우 메시지 큐를 갖고 있고 운영체제는 이 메시지들을 응용프로그램 메시지큐에 전송해주는 역할을 한다.
딱 전송만 해주고 거기까지가 운영체제가 해주는 역할이고 프로그래머는 각각의 갖고있는 메시지 큐로부터 메시지를 꺼내는 작업을 프로그래밍 해야하고 그 꺼낸 메시지를 어떻게 처리해야 할지 프로그래밍 해야한다.
'프로그래밍 > Windows OS, API ' 카테고리의 다른 글
간단한 윈도우 창 만들기2 (0) | 2016.10.19 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AMSI
- Servey
- koodous
- 한글악성코드
- 비트코인
- CVE-2018-9375
- 위협정보공유
- us-cert
- 악성코드
- Decoding
- Static Analysis Engine
- infostealer
- Bisonal
- MS-Office
- Yara
- Cisco Talos
- idapython
- Flybits
- .wll
- VirusBulletin
- 스피어피싱
- 멋쟁이사자처럼 4기
- malware
- Kimsuky
- cuckoo-sandbox
- 출처 : Do it 안드로이드 프로그래밍
- CVE-2018-0798
- 해킹메일
- keylogger
- vuln
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함