티스토리 뷰
#include <stdio.h> #include <Windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); unsigned int GetListBoxCount(HWND hListbox); void KillProcess(char *a_sName); HINSTANCE g_hInst; 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좌표 1000, // 넓이 1000, // 높이 NULL, // 부모 윈도우 핸들 NULL, // 메뉴 hinstance, // 인스턴스 NULL ); MSG msg; while (GetMessageA(&msg,0,NULL,NULL)) // 메시지를 반복적으로 꺼낸다. 이 함수를 써야 메시지큐에서 메시지를 꺼낼 수가 있다. { DispatchMessageA(&msg); // 메시지가 올 때마다 꺼내서 아래 메시지 처리 함수가 호출될 수 있도록 Dispatch 해준다. } return 0; } #define BUTTON_ADD 100 #define BUTTON_CHECK 200 #define EDIT_INPUT 300 #define LIST 400 HWND hEdit; HWND hListBox; LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) // 실제로 메시지를 처리 { static char sBuf[1024] = { 0 }; static unsigned int nCount = 0; // 메시지가 발생할 때마다 이 함수가 호출 switch (uMsg) { case WM_CREATE: CreateWindowA("button", "Add", WS_CHILD | WS_VISIBLE, 0, 0, 100, 100, hwnd, (HMENU)BUTTON_ADD, g_hInst, NULL); // hInstance에는 프로그램이 메모리에 로드가 되면 시작 주소를 넣어주야 함 CreateWindowA("button", "Check", WS_CHILD | WS_VISIBLE, 0, 100, 100, 100, hwnd, (HMENU)BUTTON_CHECK, g_hInst, NULL); // 자식 윈도우를 만들 때 hMenu는 고유한 id가 된다. hEdit = CreateWindowA("edit", "", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 200, 300, 30, hwnd, (HMENU)EDIT_INPUT, g_hInst, NULL); hListBox = CreateWindowA("listbox", "", WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 300, 300, 300, hwnd, (HMENU)LIST, g_hInst, NULL); return 0; case WM_COMMAND: switch (LOWORD(wParam)) { case BUTTON_ADD: GetWindowTextA(hEdit, sBuf, 1024); // sBuf에 edit창에 있는 글자를 가져옴. SendMessageA(hListBox, LB_ADDSTRING, NULL, (LPARAM)sBuf); // hListBox에 LB_ADDSTRING으로 sBuf를 추가시킴. break; case BUTTON_CHECK: nCount = GetListBoxCount(hListBox); for (int i = 0; i < nCount; i++) SendMessageA(hListBox, LB_GETTEXT, i, (WPARAM)sBuf); KillProcess(sBuf); //MessageBoxA(0, sBuf, sBuf, 0); break; } return 0; case WM_DESTROY: // 닫기 버튼을 눌렀을 때 PostQuitMessage(0); return 0; } return DefWindowProcA(hwnd, uMsg, wParam, lParam); //기본적인 메시지(최대, 최소화 등)를 윈도우가 모두 해주는 함수 } unsigned int GetListBoxCount(HWND hListbox) { unsigned int nCount = 0; nCount = SendMessageA(hListBox, LB_GETCOUNT, 0, 0); return nCount; } void KillProcess(char *a_sName) { HANDLE hProcess; DWORD dwPid = 0; HWND hWnd; hWnd = FindWindowA(NULL, a_sName); // 해당 프로그램 이름의 핸들을 가져옴. GetWindowThreadProcessId(hWnd, &dwPid); // hWnd = PID를 얻고자하는 윈도우의 핸들 // dwPid = 반환받을 PID의 포인터 hProcess = OpenProcess(PROCESS_TERMINATE, false, dwPid); // 프로세스의 핸들 값을 리턴. TerminateProcess(hProcess, 0); // 해당 프로세스를 죽임. }
'프로그래밍 > Windows OS, API ' 카테고리의 다른 글
간단한 윈도우 창 만들기 (0) | 2016.10.19 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- idapython
- Yara
- CVE-2018-0798
- 위협정보공유
- 멋쟁이사자처럼 4기
- AMSI
- Kimsuky
- 비트코인
- 스피어피싱
- Decoding
- Servey
- Cisco Talos
- 악성코드
- 해킹메일
- infostealer
- cuckoo-sandbox
- us-cert
- Bisonal
- koodous
- Static Analysis Engine
- .wll
- 출처 : Do it 안드로이드 프로그래밍
- CVE-2018-9375
- vuln
- malware
- MS-Office
- Flybits
- VirusBulletin
- keylogger
- 한글악성코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함