Microsoft Word - hook5.doc
|
|
- 정철 주
- 6 years ago
- Views:
Transcription
1 개발자를위한윈도우후킹테크닉 Spy++ 클론 imspy 제작하기 지난시간까지우리는 WH_GETMESSAGE, WH_CALLWNDPROC, WH_CALLWNDPROCRET 을 사용하는이론적인방법과동기화방법에대해서살펴보았다. 이번시간에는세가지훅을 사용해서 Spy++ 과같이메시지처리과정을보여주는프로그램을작성할것이다. 목차 목차...1 필자소개...1 연재가이드...1 연재순서...2 필자메모...2 Intro...2 공용자료들...4 훅프로시저...6 메시지관리 IPC 쓰레드 윈도우찾기 도전과제 진짜 Spy++ 을제작하고싶은분들을위한팁 참고자료 필자소개 신영진 부산대학교정보, 컴퓨터공학부 4 학년에재학중이다. 모자란학점을다채워서졸업하는것이꿈이되버린소박한괴짜프로그래머. 병역특례기간을포함해서최근까지다수의보안프로그램개발에참여했으며, 최근에는모짜르트에심취해있다. 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : 마이크로소프트비주얼스튜디오 2003 기초지식 : C/C++, Win32 프로그래밍
2 응용분야 : 메시지모니터링프로그램 연재순서 키보드모니터링프로그램만들기 마우스훅을통한화면캡쳐프로그램제작 메시지훅이용한 Spy++ 흉내내기 SendMessage 후킹하기 Spy++ 클론 imspy 제작하기 저널훅을사용한매크로제작 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 WH_DEBUG 훅을이용한훅탐지방법 OutputDebugString 의동작원리 필자메모 훌륭한책은마음의양식이되기도하고한사람의삶을바꾸어놓기도한다. 물론기술서적중에이러한책은잘없지만, 저자의깊은이해와설명에감탄이나오는책은종종만날수있다. Windows 프로그래밍관련책중에위와같은느낌을받은책을한권만꼽으라면주저없이 Jeffrey Richter 의 Programming Applications for Microsoft Windows(4/e) 를선택할것이다. 이책은 Windows 시스템프로그래밍의거의대부분의영역을커버하고있으며, Windows 시스템의동작원리에대해서도자세하게설명하고있다. 아직까지책을읽어보지않았다면꼭읽어보길권하고싶다. 필자가이책을처음접한건 2003 년이었다. 하지만지금까지도이책을볼때면눈물을 흘린다. 이책을읽고난후에는 Windows 시스템에대해서좀더깊이있는이해를할수 있게될것이다. Intro 이번시간에우리는지금까지공부했던세가지훅 (WH_GETMESSAGE, WH_CALLWNDPROC, WH_CALLWNDPROCRET) 를사용해서윈도우로전송되는메시지를모니터링하는프로그램을작성해볼것이다. 이프로그램이하는일은 Spy++ 과유사하다. Spy++ 의기능 2/19 페이지
3 중일부를구현한것이라생각하면편하다. 우리가제작할 imspy 를간단히살펴보도록 하자. 화면 1 imspy 에서윈도우목록을표시한화면 < 화면 1> 은 imspy 에서윈도우목록을표시한화면이다. 기본적으로 Spy++ 과동일하게 트리뷰로윈도우의계층구조를표시해주며, 오른쪽에는선택된윈도우에대한일부 속성을구해서표시해준다. 화면 2 imspy 에서메시지옵션을설정하는화면 3/19 페이지
4 감시메뉴에서로그메시지를선택하면 < 화면 2> 와같은대화상자가표시된다. 왼쪽에는모니터링할메시지목록이트리형태로나타난다. 오른쪽에는창찾기도구와선택한창에대한속성이나타난다. 창찾기도구는 Spy++ 과마찬가지로드래그를통해서윈도우를찾는기능을한다. 화면 3 imspy 에서메시지후킹을통해서메시지를확인하는화면 < 화면 3> 은 imspy 를사용해서키보드메시지를모니터링하고있는화면이다. 종류는 Spy++ 과마찬가지로 P, S, R 이출력된다. RETURN 부분에는 SendMessage 로전달된메시지가리턴될때의결과값이출력된다. 공용자료들 imspy 전역에서공통으로사용되는자료형이 < 리스트 1> 에나와있다. 주석에개략적인설명이나와있다. IMSPYMSGDATA 구조체는파일매핑오브젝트에저장되는내용이다. type 은메시지가발생된상황을나타낸다. 우리는세개의훅을설치해서메시지정보를받기때문에총세가지종류가나올수있다. MSGT_POST, MSGT_SEND, MSGT_SENDRET 가그것이다. result 는 type 이 MSGT_SENDRET 인경우에만의미를가진다. 리스트 1 공용자료들 const UINT MSGT_POST = 1; // WH_GETMESSAGE 4/19 페이지
5 const UINT MSGT_SEND const UINT MSGT_SENDRET = 2; // WH_CALLWNDPROC = 4; // WH_CALLWNDRETPROC typedef struct _IMSPYMSGDATA UINT type; // 메시지종류 HWND hwnd; UINT message; WPARAM wparam; LPARAM lparam; LRESULT result; BYTE param[2048]; // 메시지발생윈도우 // 메시지번호 // WPARAM // LPARAM // SendMessage 리턴값 // 메시지관련정보 IMSPYMSGDATA, *PIMSPYMSGDATA; #ifndef _T #define _T TEXT #endif LPCTSTR const IMSPY_MUTEXNAME = _T("imspy_mutex"); LPCTSTR const IMSPY_BUFFER_EVENTNAME = _T("imspy_bufferReady"); LPCTSTR const IMSPY_DATA_EVENTNAME = _T("imspy_dataReady"); LPCTSTR const IMSPY_FILEMAPNAME = _T("imspy_filemap"); LPCTSTR const IMSPYHK_DLLNAME = _T("imspyhk.dll"); param 은메시지별로추가적인정보를담는역할을한다. 메시지로전달되는 WPARAM 이나 LPARAM 에포인터가포함된경우해당포인터에대한정보는컨텍스트가변경되면알수없다. 이러한정보를훅프로시저내에서복사하는데사용한다. 이러한메시지의대표적인예로 WM_WINDOWPOSCHANGED 가있다. 이메시지의경우 LPARAM 으로 WINDOWPOS 구조체의포인터가넘어온다. 이경우에 WINDOWPOS 구조체를훅프로시저에서복사해두지않는다면나중에해당내용을참조할수가없다. 다음으로나오는문자열들은전역커널오브젝트의이름을나타낸다. 각오브젝트가하는 일은 < 표 1> 에나타나있다. IMSPYHK_DLLNAME 은 imspy 에서사용할후킹 DLL 모듈의 이름을나타낸다. 표 1 커널오브젝트역할 오브젝트이름 IMSPY_MUTEXNAME IMSPY_BUFFER_EVENTNAME 역할 imspy 의중복실행을방지하는역할을한다. 또한훅프로시저에서무한대기를방지하는용도로사용된다. 파일맵오브젝트에훅프로시저가접근해도됨을알리는이벤트다. 5/19 페이지
6 IMSPY_DATA_EVENTNAME 파일맵오브젝트에훅프로시저가데이터기록을 완료했음을알리는이벤트다. IMSPY_FILEMAPNAME 프로세스간통신을위해사용되는파일맵오브젝트다. 훅프로시저 세가지훅에대한훅프로시저코드가 < 리스트 2> 에나타나있다. GetMessageProc 은 WH_GETMESSAGE 훅에대한, CallWndProc 은 WH_CALLWNDPROC 에대한, CallWndRetProc 은 WH_CALLWNDPROCRET 에대한훅프로시저다. 세개의훅프로시저모두두개의헬퍼함수를사용해서작업을수행한다. 메시지정보를수집하는 FillMsgData 함수와, 수집된메시지를응용프로그램에게전달하는 NotifyMsgData 가그것이다. 리스트 2 훅프로시저코드 LRESULT CALLBACK GetMessageProc(int code, WPARAM w, LPARAM l) if(code == HC_ACTION && w == PM_REMOVE) PMSG msg = (PMSG) l; IMSPYMSGDATA data; FillMsgData(&data, MSGT_POST, msg->hwnd, msg->message, msg->wparam, msg->lparam, 0 ); NotifyMsgData(&data); return CallNextHookEx(NULL, code, w, l); LRESULT CALLBACK CallWndProc(int code, WPARAM w, LPARAM l) LRESULT ret = CallNextHookEx(NULL, code, w, l); if(code == HC_ACTION) PCWPSTRUCT cwp = (PCWPSTRUCT) l; IMSPYMSGDATA data; FillMsgData(&data, MSGT_SEND, cwp->hwnd, cwp->message, 6/19 페이지
7 cwp->wparam, cwp->lparam, 0 ); NotifyMsgData(&data); return ret; LRESULT CALLBACK CallWndRetProc(int code, WPARAM w, LPARAM l) LRESULT ret = CallNextHookEx(NULL, code, w, l); if(code == HC_ACTION) PCWPRETSTRUCT cwpr = (PCWPRETSTRUCT) l; IMSPYMSGDATA data; FillMsgData( &data, MSGT_SENDRET, cwpr->hwnd, cwpr->message, cwpr->wparam, cwpr->lparam, cwpr->lresult ); NotifyMsgData(&data); return ret; FillMsgData 함수가하는일은인자로넘어온정보를이용해서 PIMSPYMSGDATA 의각필드를설정하는것이다 (< 리스트 3> 참고 ). 필드설정이끝나고나면 param 데이터를복사하는부분이나온다. 현재함수에는두가지메시지에대한 param 정보설정코드만나타나있다. 실제 Spy++ 과같이전체메시지에대한구조체정보를표시하기위해서는이부분에포인터가전달되는모든메시지에대한처리루틴을넣어야한다. 리스트 3 FillMsgData 코드 void FillMsgData( PIMSPYMSGDATA data, UINT type, HWND hwnd, UINT msg, WPARAM w, LPARAM l, LRESULT result ) ASSERT(data!= NULL); 7/19 페이지
8 data->type = type; data->hwnd = hwnd; data->message = msg; data->wparam = w; data->lparam = l; data->result = result; switch(msg) case WM_WINDOWPOSCHANGED: CopyMemory(data->param, (PWINDOWPOS) l, sizeof(windowpos)); break; case WM_NEXTMENU: CopyMemory(data->param, (PMDINEXTMENU) l, sizeof(mdinextmenu)); break; < 리스트 4> 는 FillMsgData 함수를통해서수집된정보를실제로응용프로그램으로전달되는부분이다. NotifyMsgData 는일단버퍼에기록을허용하는이벤트를대기한다. 해당이벤트가발생하면 FillMsgData 에서지역변수에수집된메시지를파일맵오브젝트로복사를한다. 그리고데이터기록이완료되었다는이벤트를전달한다. 여기서굳이지역변수를사용해서메시지를수집한주된이유는훅프로시저가지나치게오랜시간동안잠기지않도록하기위해서다. ( 물론지금은 FillMsgData 가굉장히간단하기때문에 CopyMemory 하는것이더오래걸릴수도있다.) SafeWaitForSingleObject 는 Wait 함수에의해서훅프로시저가무한대기에빠지는현상을방지하기위해서사용된것이다. 메인프로그램이강제종료되면대기중인이벤트에대한처리를마무리할수없다. 만약운이나쁘게아주좋지않은상황에메인프로그램이강제종료된다면훅루틴은메인프로그램이다시기동하기전까지잠기게된다. 이러한상황을방지하기위해서메인프로그램이동작중인지를체크해서없는경우에는대기하지않고빠져나가도록처리한것이다. 이와같은방법을사용함으로써우리는최악의상황에도훅프로시저는 500ms 이하의대기만수행한다는보장을할수있다. 리스트 4 메시지정보를응용프로그램으로전달하는함수들 DWORD WINAPI CheckMutex(LPCTSTR mutexname) HANDLE h = OpenMutex(SYNCHRONIZE, FALSE, mutexname); if(h) CloseHandle(h); return TRUE; 8/19 페이지
9 return FALSE; DWORD WINAPI SafeWaitForSingleObject(HANDLE h, LPCTSTR mutexname) DWORD r = WAIT_FAILED; while(checkmutex(mutexname)) r = WaitForSingleObject(h, 500); if(r!= WAIT_TIMEOUT) break; return r; void NotifyMsgData(PIMSPYMSGDATA data) if(safewaitforsingleobject(g_bufferreadyevent, IMSPY_MUTEXNAME) == WAIT_OBJECT_0) CopyMemory(g_msgData, data, sizeof(*data)); SetEvent(g_dataReadyEvent); 박스 1 TerminateProcess 프로세스의강제종료는후킹프로그램에게는재앙과도같은일이다. 작업관리자에서프로세스를강제종료시키면 TerminateProcess 라는 API 가호출된다. 이 API 가호출되면운영체제는해당프로세스를강제로메모리에서내리고자원을반환한다. 하지만이과정에서해당프로그램에게는어떠한통지도가지않는다. 이경우에혼자동작하는프로그램의경우에는큰문제가없다. 할당된메모리와커널오브젝트의경우운영체제에서알아서해제해주기때문이다. 하지만여러프로세스에걸쳐서동기화해서움직이는후킹프로그램의경우큰문제가발생할수있다. 왜냐하면동기화에사용된오브젝트를해당프로그램에서적법한절차를거치지않고파기시켰기때문에다른프로세스에서해당동기화오브젝트에접근할수없는일이발생하기때문이다. 만약해당프로그램이전체프로세스를후킹하고있었다면최악의경우에는컴퓨터를껐다켜야하는상황이발생할수도있다. 따라서후킹프로그램을작성할때에는항상 TerminateProcess 가발생하더라도안정적으로동작하도록하는데많은신경을써야한다. 9/19 페이지
10 메시지관리 Windows 에는수천종류의메시지가있다. 이렇게많은메시지를분류해서관리하는작업은상당히힘든일이다. 실제로 imspy 에는모든종류의메시지가들어있진않다. 100 여가지의메시지에대한정보만추가되어있다. 메시지정보를저장하는구조체는 < 리스트 5> 에나타나있다. 메시지정보를저장하는구조체와해당메시지가포함될카테고리를저장할구조체가있다. 두구조체를사용해서프로그램에서처리할메시지목록을 < 리스트 6> 과같이구조체배열을사용해서저장한다. 리스트 5 메시지정보구조체 // 메시지정보구조체 typedef struct _MSGDATA UINT category; // 카테고리 UINT id; // 메시지번호 LPCTSTR name; // 메시지이름 MSGDATA, *PMSGDATA; // 카테고리정보구조체 typedef struct _MSGCATDATA UINT category; // 카테고리 LPCTSTR name; // 카테고리명 MSGCATDATA, *PMSGCATDATA; 리스트 6 메시지정의부분 const UINT MSGCT_KEYBOARD = 1; // 키보드메시지 const UINT MSGCT_MOUSE = 2; // 마우스메시지 const UINT MSGCT_CLIPBOARD = 3; // 클립보드메시지 const UINT MSGCT_DLG = 4; // 다이알로그메시지 //... 중략 #define DEFMSG(category, id, name) category, id, name #define DEFMSG_KEY(id, name) DEFMSG(MSGCT_KEYBOARD, id, name) #define DEFMSG_MOUSE(id, name) DEFMSG(MSGCT_MOUSE, id, name) #define DEFMSG_CLIP(id, name) DEFMSG(MSGCT_CLIPBOARD, id, name) //... 중략 const MSGCATDATA CMsgData::m_msgCatData[] = MSGCT_KEYBOARD, _T(" 키보드 "), MSGCT_MOUSE, _T(" 마우스 "), MSGCT_CLIPBOARD, _T(" 클립보드 "), 10/19 페이지
11 //... 중략 const MSGDATA CMsgData::m_msgData[] = DEFMSG_KEY(WM_KEYDOWN, _T("WM_KEYDOWN")), DEFMSG_KEY(WM_KEYUP, _T("WM_KEYUP")), DEFMSG_KEY(WM_CHAR, _T("WM_CHAR")), DEFMSG_KEY(WM_DEADCHAR, _T("WM_DEADCHAR")), DEFMSG_KEY(WM_SYSKEYDOWN, _T("WM_SYSKEYDOWN")), DEFMSG_KEY(WM_SYSKEYUP, _T("WM_SYSKEYUP")), DEFMSG_KEY(WM_SYSCHAR, _T("WM_SYSCHAR")), DEFMSG_KEY(WM_SYSDEADCHAR, _T("WM_SYSDEADCHAR")), DEFMSG_KEY(WM_UNICHAR, _T("WM_UNICHAR")), DEFMSG_MOUSE(WM_MOUSEMOVE, _T("WM_MOUSEMOVE")), DEFMSG_MOUSE(WM_LBUTTONDOWN, _T("WM_LBUTTONDOWN")), DEFMSG_MOUSE(WM_LBUTTONUP, _T("WM_LBUTTONUP")), DEFMSG_MOUSE(WM_LBUTTONDBLCLK, _T("WM_LBUTTONDBLCLK")), //... 중략 메시지를실제사용자가알아보기쉽게문자열로변환해주는작업은 < 리스트 7> 에나타난자료구조를통해서수행된다. FDECODEMSG 는메시지를문자열로변환해주는함수포인터다. 각각의메시지는하나이상의변환함수를가진다. MSGDECODER 를보면변환함수가벡터로구성된것을볼수있다. MsgIndexMap 은메시지번호와거기에따른정적배열의인덱스넘버와변환함수를저장한다. 즉, 메시지번호가날라오면단번에인덱스번호와, 변환함수목록을알수있는것이다. MsgIndexMap 은프로그램이로딩될때생성된다. 다음으로중요한자료구조는 MsgSet 이다. 각각의메시지모니터링윈도우는서로다른메시지를처리하게된다. 각각의윈도우는자신이처리해야하는메시지를 MsgSet 에저장해서각자담아둔다. 메시지가발생하면모든윈도우로해당정보를전송하고, 해당윈도우는자신의 MsgSet 에메시지번호가존재하는경우에만해당내용을처리해서추가한다. 리스트 7 메시지디코딩정보를저장할구조체 // 메시지디코딩함수 typedef BOOL (CALLBACK *FDECODEMSG)(LPTSTR buf, UINT size, IMSPYMSGDATA &data); // 메시지디코딩함수목록을저장할벡터 typedef std::vector<fdecodemsg> DecodeFuncVec; typedef std::vector<fdecodemsg>::iterator DecodeFuncVIt; typedef std::vector<fdecodemsg>::reverse_iterator DecodeFuncVRIt; // 메시지디코더정보 11/19 페이지
12 typedef struct _MSGDECODER UINT no; DecodeFuncVec fn; MSGDECODER, *PMSGDECODER; typedef std::set<uint> MsgSet; typedef std::set<uint>::iterator MsgSIt; typedef std::map<uint, MSGDECODER> MsgIndexMap; typedef std::map<uint, MSGDECODER>::iterator MsgIndexMIt; 위에서소개한모든데이터를저장하고있는클래스가 CMsgData 이다 (< 리스트 8> 참고 ). 메시지목록을정적배열로가지고있다. 해당메시지목록에대한 MsgIndexMap 은생성자에서초기화한다. 가장기본적인메시지디코딩함수인 Default 를포함하고있다. Get 을통해서메시지번호에대한메시지정보구조체에접근할수있고, Decode 를통해서수신된메시지에대한정보를생성할수있다. 리스트 8 CMsgData 클래스 class CMsgData private: static const MSGDATA m_msgdata[]; static const MSGCATDATA m_msgcatdata[]; MsgIndexMap m_index; protected: CMsgData(); static BOOL CALLBACK Default(LPTSTR buf, UINT size, IMSPYMSGDATA &data); public: const PMSGDATA Get(UINT msg); BOOL Enum(CMsgDataCallback &cb); BOOL Enum(CMsgCatDataCallback &cb); BOOL Decode(LPTSTR buf, UINT size, IMSPYMSGDATA &data); BOOL AddDecoder(UINT msg, FDECODEMSG fn); BOOL DeleteDecoder(UINT msg, FDECODEMSG fn); ; friend CMsgData &MsgData(); IPC 쓰레드 < 리스트 9> 에훅 DLL 과통신하는 IPC 쓰레드의코드가나와있다. 쓰레드는굉장히간단하다. 시작과동시에 bufferready 이벤트를설정해서다른 DLL 들이버퍼에접근할수있도록만든다. 그리고 dataready 이벤트가설정되면공유메모리의내용을지역버퍼로 12/19 페이지
13 복사한후큐에추가하고메인윈도우에메시지가발생했음을알려준다. m_exitevent 는 쓰레드내부적으로종료체크를하기위해서사용된다. 리스트 9 훅프로시와통신하는쓰레드코드 void CCommThread::Go() //... 중략 IMSPYMSGDATA msg; HANDLE events[2] = m_exitevent, dataready ; HANDLE lock[2] = m_exitevent, m_lockmutex ; DWORD s = 0; for(;;) SetEvent(bufferReady); s = WaitForMultipleObjects(2, events, FALSE, INFINITE); if(s == WAIT_OBJECT_0) break; if(s!= WAIT_OBJECT_0 + 1) continue; CopyMemory(&msg, data, sizeof(imspymsgdata)); s = WaitForMultipleObjects(2, lock, FALSE, INFINITE); if(s == WAIT_OBJECT_0) break; if(s == WAIT_OBJECT_0 + 1 s == WAIT_ABANDONED) CMutexLocker locker(m_lockmutex); m_msgs.push(msg); PostMessage(m_notifyWnd, WM_MSGFIRE, 0, 0); 위에서전달한 WM_MSGFIRE 의메시지핸들러가 < 리스트 10> 에나와있다. 메시지핸들러에서는쓰레드큐에서메시지데이터를하나꺼내서 MDI 자식들을순회하면서메시지를추가해주는일을한다. m_lockmutex 는쓰레드의큐에접근을동기화시키기위한뮤텍스다. 리스트 10 메시지처리함수 LRESULT CMainFrame::OnMsgFire(WPARAM w, LPARAM l) 13/19 페이지
14 CWnd *wnd; CMsgListFrm *p; IMSPYMSGDATA data; for(;;) // 버퍼에서메시지하나를빼낸다. CMutexLocker locker(m_commthread->m_lockmutex); if(m_commthread->m_msgs.empty()) break; data = m_commthread->m_msgs.front(); m_commthread->m_msgs.pop(); // 메시지목록윈도우에메시지를추가한다. for(wnd = m_mdiclient.getwindow(gw_child); wnd!= NULL; wnd = wnd->getwindow(gw_hwndnext)) if(wnd->iskindof(runtime_class(cmsglistfrm))) p = (CMsgListFrm *) wnd; p->addmessge(data); return 0; 실제로메시지를리스트에추가하는부분은 < 리스트 11> 에나타나있다. m_hookenabled 는현재훅이활성화되어있는지를나타난다. 로그중지메뉴를선택하면 m_hookenabled 가 FALSE 로설정된다. m_watchwnd 는후킹대상윈도우를나타낸다. m_watchmsgs 는모니터링중인메시지목록을나타낸다. 리스트 11 리스트에메시지를추가하는부분 void CMsgListFrm::AddMessge(IMSPYMSGDATA &data) if( m_hookenabled && data.hwnd == m_watchwnd && m_watchmsgs.find(data.message)!= m_watchmsgs.end()) LPCTSTR type[] = _T(""), _T("P"), _T("S"), _T("R") ; CString buf; int cnt = m_lvcmsgs.getitemcount(); 14/19 페이지
15 buf.format(_t("%04d"), cnt+1); m_lvcmsgs.insertitem(cnt, buf); m_lvcmsgs.setitemtext(cnt, 1, type[data.type]); buf.format(_t("%08x"), data.hwnd); m_lvcmsgs.setitemtext(cnt, 2, buf); //... 중략 윈도우찾기 많은사람들에게 Spy++ 하면가장먼저떠오르는기능은아마도마우스로커서를드래그하면서윈도우를찾는기능일것이다. 이기능의경우눈에보이는윈도우를바로찾아준다는점에서굉장히유용한기능이다. 이기능은 imspy 에서는메시지옵션을설정하는대화상자에구현되어있다. < 화면 2> 에서창찾기도구에나타난아이콘을드래그하면 Spy++ 과같이창이찾아지는것을확인할수있다. 마우스포인터위의윈도우를찾는함수로 WindowFromPoint, ChildWindowFromPoint, RealChildWindowFromPoint 등의함수가있다. 하지만 ChildWindowFromPoint 의경우그룹상자위에놓여진 Static 컨트롤등을정확하게찾아내지못한다는단점이있고, RealChildWindowFromPoint 는그러한문제가해결되었으나, 95 에서는지원하지않고마우스위치에있는가장작은자식윈도우를정확하게찾아내진못한다는단점이있다. < 리스트 12> 에는이러한문제를해결한코드가나와있다. 리스트 12 마우스포인터위의윈도우를찾는코드 HWND FindSmallestChildWindowFromPoint(HWND hwnd, CPoint &pt) HWND child = GetWindow(hwnd, GW_CHILD); HWND result = NULL; if(child) HWND h; CRect rc; CRect tmp; BOOL issmall; // 자식을조사한다. for(child = GetWindow(hwnd, GW_CHILD); child!= NULL; child = GetWindow(child, GW_HWNDNEXT)) 15/19 페이지
16 // 자기보다더깊은곳의자식을먼저찾는다. h = FindSmallestChildWindowFromPoint(child, pt); // 찾았으면리턴한다. if(h) return h; GetWindowRect(child, &tmp); // 현재윈도우영역에마우스포인터가포함되고 // 처음이거나이전에찾은윈도우보다작은경우 issmall = tmp.width() <= rc.width() && tmp.height() <= rc.height(); if(tmp.ptinrect(pt) && (!result issmall)) result = child; rc = tmp; return result; HWND FindSmallestWindowFromPoint(CPoint &pt) HWND hwnd = WindowFromPoint(pt); if(hwnd) HWND child = FindSmallestChildWindowFromPoint(hwnd, pt); if(child) return child; return hwnd; 기본적인아이디어는 WindowFromPoint 를사용해서큰윈도우를찾은다음, 그아래자식들을기준으로깊이우선탐색 (depth-first search) 를하는것이다. 이렇게할경우가장깊은자식에게우선순위가간다. 같은깊이의자식들중에는마우스포인터를포함하는가장작은영역을가진윈도우를찾도록되어있다. 그럼이제마우스트래킹을하면서윈도우를찾는방법을알아보자. 마우스트래킹을하기위해서는네개의메시지핸들러를작성해주어야한다. WM_LBUTTONDOWN, WM_MOUSEMOVE, WM_LBUTTONUP, WM_CAPTURECHANGED 가그것이다. WM_LBUTTONDOWN 이발생하면 SetCapture 를통해서마우스를캡쳐하고트래킹을시작하면된다 (< 리스트 13> 참고 ). WM_MOUSEMOVE 에서는트래킹이시작되었다면마우스아래에있는윈도우를찾아서표시하는일을한다 (< 리스트 15> 참고 ). 16/19 페이지
17 WM_LBUTTONUP 과 WM_CAPTURECHANGED 에서는 ReleaseCapture 를통해서마우스 캡쳐를해제하고트래킹을중지하면된다 (< 리스트 14> 참고 ). 리스트 13 마우스트래킹시작함수 void CMsgOptionDlg::StartFindWindow() m_finding = TRUE; // 트래킹중인지를나타내는멤버변수 m_watchwnd = 0; // 최종적으로발견한윈도우핸들 ChangeFinderIcon(); // 파인더아이콘변경 m_prevcursor = SetCursor(m_finderCursor); // 커서변경 //ShowWindow(SW_HIDE); SetCapture(); 리스트 14 마우스트래킹중지함수 void CMsgOptionDlg::StopFindWindow() m_finding = FALSE; ChangeFinderIcon(); SetCursor(m_prevCursor); //ShowWindow(SW_SHOW); ReleaseCapture(); DrawBorder(); 리스트 15 마우스포인터에있는윈도우를찾아서표시하는함수 void CMsgOptionDlg::Find() CPoint pt; GetCursorPos(&pt); HWND hwnd = FindSmallestWindowFromPoint(pt); if(hwnd && hwnd!= m_watchwnd) DrawBorder(); // 이전에그려진경계를지운다 m_watchwnd = hwnd; UpdateWindowInfo(); DrawBorder(); // 새롭게찾은윈도우의경계를그린다. 17/19 페이지
18 도전과제 필자가처음에 imspy 를제작할때에윈도우목록필터링기능과메시지디코딩기능을넣으려했었으나시간관계로기능을추가하지못했다. 이번달도전과제는이기능을추가하는것으로해보자. 윈도우목록필터링기능은많은윈도우목록중에자신이원하는특정윈도우만보여주는기능을하는것이다. 예를들면화면에보이는창만출력한다거나아니면특정프로세스의창만출력하는기능등을생각해볼수있다. 이경우한가지조심해야할것은자신은화면에나타나지않는창이라고무조건제거해서는안된다는점이다. 자식이화면에표시되는창이라면그부모가화면에나타나지않아도표시해주어야지정확한계층구조를확인할수있다는점이다. 메시지디코딩기능은메시지디코딩함수를추가해서설명부분에디코딩한결과를출력하는것이다. Spy++ 은메시지가출력될때에 WPARAM, LPARAM 이런식으로표시하지않고각메시지에맞게항목을보기좋게출력해주는것을볼수있다. 이러한기능을하도록구현해보자. 설명부분에추가하면될것이다. 진짜 Spy++ 을제작하고싶은분들을위한팁 이번달의 imspy 샘플은진짜 Spy++ 의클론을구현하기위한좋은파일럿프로그램이될수있다. 하지만이번달의우리가제작한 imspy 는지역훅을사용했기때문에기능구현에한계를가지고있다. Spy++ 의전체기능을작성해야한다면전역훅을사용하는것이편리하다. 지난시간까지우리는전역훅의경우시스템성능이느려질수있고, 위험하기때문에사용하지않는것이좋다고했었다. 이말은실제로맞는말이다. 하지만항상트레이드오프는있는법이다. 느려지고위험하지만그것보다얻는이득이크다면설치해서사용해볼수있다는점이다. 전역훅을사용할경우엔어떤기능을구현하기쉬울까? 첫째는윈도우속성구하는기능이다. 윈도우속성중일부항목은해당윈도우를생성한프로세스의컨텍스트에서만구할수있다. 따라서모든윈도우의속성을구하기위해서는모든윈도우의프로세스컨텍스트에서실행이되어야하고이는곧전역적으로훅이설치되어야함을의미한다. 실제로 Spy++ 은전역훅을설치하고해당윈도우로 WM_NULL 메시지가포스팅되면해당윈도우의속성을구해서공유섹션부분에기록한다. 18/19 페이지
19 두번째기능은여러윈도우를동시에모니터링하는기능이다. Spy++ 의메시지옵션부분을보면부모윈도우, 소유자윈도우, 같은프로세스윈도우등을같이모니터링할수있는기능이있다. 이러한기능의경우우리와같이지역훅을사용할때에는매우구현이까다롭게된다. 왜냐하면이러한윈도우들이같은쓰레드에존재하라는법이없기때문이다. 물론이두가지를모두전역훅을설치하지않고할수있다. 하지만그렇게할경우엔배보다배꼽이더커지는격이될수있음을기억하자. 참고자료 참고자료 1. Jeffrey Richter. <<Programming Applications for Microsoft Windows (4/E)>> Microsoft Press 참고자료 2. 김상형, <<Windows API 정복 >> 가남사참고자료 3. 김성우, << 해킹 / 파괴의광학 >> 와이미디어참고자료 4. Spy++ 과같이윈도우를찾아내는방법 19/19 페이지
Microsoft PowerPoint - 09-CE-5-윈도우 핸들
순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정
More informationMicrosoft Word - hook3.doc
개발자를위한윈도우후킹테크닉 메시지훅이용한 Spy++ 흉내내기 우리는지난강좌에서후킹을하는기초적인방법과사용되는 API 들을비롯해서후킹함수가호출되는컨텍스트에대해서배웠다. 이번강좌에서는 WH_GETMESSAGE 훅을통해서 Spy++ 과유사한프로그램을제작할것이다. 이과정에서 Windows 애플리케이션이메시지를처리하는과정과윈도우를열거하는방법에대해서알아보도록하자. 목차
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More informationMicrosoft Word - hook4.doc
개발자를위한윈도우후킹테크닉 SendMessage 후킹하기 지난시간에 WH_GETMESSAGE 훅을통해서메시큐에서메시지가처리되는과정을후킹해보았다. 이번시간에는 WH_CALLWNDPROC, WH_CALLWNDRETPROC 훅을통해서 SendMessage 의처리과정을후킹하는방법과다수의훅프로시저를설치한경우에동기화하는방법에대해서설명할것이다. 목차 목차...1 필자소개...1
More informationMicrosoft Word - hook8.doc
개발자를위한윈도우후킹테크닉 WH_DEBUG 훅을이용한훅탐지방법 지금까지우리는다양한종류의훅을사용해서다른프로그램으로전달되는메시지를가로채는방법을법을배웠다. 이번시간에는 WH_DEBUG 훅을사용해서훅프로시저를탐지하는방법에대해서다룬다. 목차 목차...1 필자소개...1 연재가이드...1 연재순서... 오류! 책갈피가정의되어있지않습니다. 필자메모...2 Intro...2
More information04장 메시지 처리 유형
4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부 메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리
More information개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API
개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로...2 2. 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API 함수소개 SetWindowsHookEx 함수 5 UnhookWindowsHookEx 함수 5
More informationPowerPoint Presentation
Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More information1장 윈도우 프로그래밍 들어가기
1 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout
More informationMicrosoft Word - hook7.doc
개발자를위한윈도우후킹테크닉 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 Win32 플랫폼에서는컨텍스트문제로다른프로세스에존재하는윈도우를서브클래싱 하기가쉽지않다. WH_CBT 훅과 WH_SHELL 훅을통해서이러한작업을하는방법을 살펴본다. 또한브라우저 URL 하이재커와팝업제거프로그램을만드는방법을살펴본다. 목차 목차...1 필자소개...1 연재가이드...
More informationMicrosoft Word - hook9.doc
개발자를위한윈도우후킹테크닉 OutputDebugString 의동작원리 우리는지금까지후킹 DLL 을 OutputDebugString 과 DebugView 를이용해서동작내용을확인했다. 하지만 DebugView 가활성화된상태에서후킹 DLL 에서 OutputDebugString 을수행하면시스템이잠시동안멈추는현상이발생한다. 이번시간에는이러한 DebugView 의불편함을해소하기위해서커스텀디버깅뷰를제작하는방법에대해서배운다.
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationUI TASK & KEY EVENT
T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationPowerPoint 프레젠테이션
Win32 API Windows Programming 1 http://idb.korea.ac.kr DB & Mining LAB. Korea Univ. 최종업데이트 : 2012. 08. 14 1 컴퓨터시스템의주요구성요소 2 2 컴퓨터하드웨어구성 Fetch : 메인메모리에저장되어있는명령어를 CPU 로 Decode : 컨트롤유닛에의해분석 Execution : ALU
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationMFC 프로그래밍
윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationK&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More information<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>
게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()
More informationMicrosoft PowerPoint - 04windows.ppt
Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationPowerPoint Presentation
public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +
More information<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>
01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationUI TASK & KEY EVENT
2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize
More information슬라이드 1
핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton
More informationMicrosoft PowerPoint - C++ 5 .pptx
C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More informationMicrosoft Word - hook1.doc
개발자를위한윈도우후킹테크닉 키보드모니터링프로그램만들기 후킹이란다른프로세스의실행경로를가로채는것을말한다. 윈도우프로그래머들이밥먹듯이하는서브클래싱 ( 윈도우메시지핸들러를가로채서컨트롤의기능을확장하는방법 ) 도후킹의한종류라할수있다. 이번강좌는 Windows Hook 을하는함수들을소개하고, 그것들을이용해서키로거를만들어본다. 목차 목차...1 필자소개...1 연재가이드...2
More informationMicrosoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More informationJAVA PROGRAMMING 실습 08.다형성
2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스
More information5장 MFC기반 다지기
5 장 MFC 기반다지기 김성영교수 금오공과대학교 컴퓨터공학부 들어가기 (1) pp.132 ~ 138 비주얼스튜디오에서 MFC 어플리케이션작성 참조 시스템메뉴 메뉴 최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 (Client Area) 스크롤바 상태표시줄 2 들어가기 (2) 3 들어가기 (3) 4 들어가기 (4) 솔루션탐색기확인 WinMain() 함수가없다?
More information제8장 자바 GUI 프로그래밍 II
제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로
More informationMicrosoft PowerPoint - 04-UDP Programming.ppt
Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여
More informationChap 6: Graphs
그래프표현법 인접행렬 (Adjacency Matrix) 인접리스트 (Adjacency List) 인접다중리스트 (Adjacency Multilist) 6 장. 그래프 (Page ) 인접행렬 (Adjacency Matrix) n 개의 vertex 를갖는그래프 G 의인접행렬의구성 A[n][n] (u, v) E(G) 이면, A[u][v] = Otherwise, A[u][v]
More informationMicrosoft PowerPoint - CPP_chap3
3 장. 마우스와키보드메시지 1 1. 능동적입력받기와수동적입력받기 2 학습목표 이벤트위주로직개념을파악한다 메시지개념을파악한다 능동적입력받기 절차적로직프로그램에서입력받기 언제무엇을입력받을지는프로그램의절차적로직에서결정 예 : 텍스트모드 C 프로그램에서문자열을입력받는경우 수동적입력받기 이벤트위주로직프로그램에서입력받기 윈도우환경에서마우스나키보드입력은 Windows
More informationView Licenses and Services (customer)
빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차
More informationLab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
More informationIS119_Message.Hooking_이성재.hwp
Message Hooking 이성재 einsstar@is119.jnu.ac.kr Content 1. 목적 1 2. 윈도우 NT 환경에서의메시지처리 2 2.1. 메시지큐를이용한메시지처리 3 2.2. 윈도우프로시저에직접메시지전달 3 3. 메시지후킹이란 3 3.1. 메시지후킹의개념정의 3 3.2. 메시지후킹의유포방법 3 4. 후킹프로시저제작 3 4.1. 사전지식
More informationgnu-lee-oop-kor-lec06-3-chap7
어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base
More information<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>
2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)
More informationFrama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie
More information그래픽 프로그래밍
제 13 장그래픽프로그래밍 13.1 베지어곡선 실습 13-1 알고리즘을통한베지어곡선그리기 실습 13-2 컨트롤포인트이동및베지어곡선 해상도설정하기 그래픽프로그래밍 베지어곡선 베지어곡선알고리즘은곡선을생성하는대표적이고기본이되는알고리즘이다. MFC 에서의베지어곡선함수 BOOL PolyBezier(const POINT* lppoints, int ncount); lppoints
More information윈도우시스템프로그래밍
객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#1) 2013.09.27. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현
More information오버라이딩 (Overriding)
WindowEvent WindowEvent 윈도우가열리거나 (opened) 닫힐때 (closed) 활성화되거나 (activated) 비활성화될때 (deactivated) 최소화되거나 (iconified) 복귀될때 (deiconified) 윈도우닫힘버튼을누를때 (closing) WindowEvent 수신자 abstract class WindowListener
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More information1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a
6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More information1장. 유닉스 시스템 프로그래밍 개요
Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시
More information쉽게 풀어쓴 C 프로그래밍
제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace
More information슬라이드 1
2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)
More information슬라이드 1
한국산업기술대학교 제 4 강프레임리스너 (Frame Listener) 이대현교수 학습안내 학습목표 프레임리스너를이용하여게임루프를구현하는방법을이해한다. 오우거엔짂의키입력처리방식을이해한다. 학습내용 프레임리스너의개념프레임리스너를이용한게임캐릭터의이동캐릭터의이동속도조절 OIS 입력시스템을이용한키보드입력의처리 기본게임루프 Initialization Game Logic
More information윤성우의 열혈 TCP/IP 소켓 프로그래밍
C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct
More informationC++ Programming
C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator
More information슬라이드 1
정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함
More information03_queue
Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More informationChapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More information4S 1차년도 평가 발표자료
객체지향프로그래밍응용 Chap 2. 프로그램의뼈대 2012.09.17. 오병우 컴퓨터공학과금오공과대학교 윈도우프로그램각부분의명칭 타이틀바 메뉴 프레임윈도우오브젝트 메뉴오브젝트 도구모음 툴바오브젝트 스크롤바 클라이언트영역 뷰오브젝트 상태표시줄 상태바오브젝트 Department of Computer Engineering 2 Win32 Application API
More information(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])
클래스의응용 클래스를자유자재로사용하자. 이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계 01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자. [ 기본예제 7-1] 클래스의치환 01 #include
More informationMicrosoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600
균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at
More informationMicrosoft PowerPoint - chap11-포인터의활용.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에
More informationChapter_02-3_NativeApp
1 TIZEN Native App April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 목차 2 Tizen EFL Tizen EFL 3 Tizen EFL Enlightment Foundation Libraries 타이젠핵심코어툴킷 Tizen EFL 4 Tizen
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More information<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>
쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것
More informationVisual C++의 개요
2.1 MFC 의개요 2.2 MFC 프로그램의구조 2.3 Visual C++ 의시작실습 2-1 Application Wizard 익히기 2.4 SDI 템플릿 2.5 MDI 템플릿 2.6 MFC 애플리케이션아키텍처실습 2-2 간단한 MFC 프로젝트만들기 MFC 의개요 MFC 윈도우애플리케이션을생성하기위해만들어진 C++ 클래스라이브러리 애플리케이션프레임워크를제공
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationUI TASK & KEY EVENT
KEY EVENT & STATE 구현 2007. 1. 25 PLATFORM TEAM 정용학 차례 Key Event HS TASK UI TASK LONG KEY STATE 구현 소스코드및실행화면 질의응답및토의 2 KEY EVENT - HS TASK hs_task keypad_scan_keypad hs_init keypad_pass_key_code keypad_init
More informationMicrosoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue
More informationJUNIT 실습및발표
JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected
More information<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>
Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.
More informationWindows 8에서 BioStar 1 설치하기
/ 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar
More information윈도우 프로그래밍의 개념
제 8 장컨트롤과리소스 II 8.1 탭컨트롤 8.2 슬라이더컨트롤실습 8-1 도형의종류와색상출력하기 8.3 스핀컨트롤 8.4 프로그레스바컨트롤 8.5 IP 주소컨트롤 8.6 네트워크주소컨트롤 8.7 날짜 / 시간컨트롤 8.8 애니메이트컨트롤실습 8.2 데이터전송시뮬레이터작성하기 컨트롤및리소스 리스트컨트롤 (List Control) 트리컨트롤 (Tree Control)
More information(Microsoft PowerPoint - \301\24613\260\255 - oFusion \276\300 \261\270\274\272)
게임엔진 제 13 강 ofusion 씬구성 이대현교수 한국산업기술대학교게임공학과 학습목차 Ofusion 을이용한 export Export 된씬의재현 씬노드애니메이션을이용한수동카메라트래킹 ofusion OGRE3D 엔진용 3D MAX 익스포터 http://www.ofusiontechnologies.com ofusion 의특징 Realtime Viewport 3D
More informationMicrosoft PowerPoint - Chapter 6.ppt
6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3 C 의 const (1)
More information본 강의에 들어가기 전
C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o
More informationPowerPoint Template
JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것
More informationMicrosoft PowerPoint 자바-기본문법(Ch2).pptx
자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March
More information1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할
15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p
More information02장.배열과 클래스
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :
More informationChapter 4. LISTS
6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립
More information학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2
학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등
More informationMicrosoft PowerPoint - hci2-lecture5-messagemap.ppt
Windows 와 C++ MFC Message Map HCI Programming 2 (321190) 2008년가을학기 10/14/2008 박경신 C++ 의다형성 (Polymorphsim) 기반클래스의어떤멤버함수를파생클래스에서재정의 (overriding) 하기위해서는기반클래스의그멤버함수가가상함수 (virtual function) 로정의되어야함 MFC 의 CWnd
More information. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요
. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요소로써안드로이드시스템에서는 Activities, Services, Content Providers,
More information<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>
객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보
More information