일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- The Giver 줄거리
- libusb
- Qt Layout
- CallBack
- thread-unsafe
- 영어 원서
- 율동 공원
- 자기계발 서적
- c# lock
- 감정수업
- 영어 원서 추천
- 윈도우 모바일 프로그래밍
- overroad
- 요한 성당
- c# static
- Windows Mobile Device Center
- 모바일 세미나
- Salva Dut
- c# Monitor.Exit
- 윈도우즈 7 ActiveSync
- PhoneIncomingCall
- CPU와 GPU의 차이
- 유니파이드 셰이더
- alsa-lib
- libsndfie
- Deep state
- 하버드 감정수업
- c# Monitor.Enter
- 남수단
- A Long walk to Water
- Today
- Total
목록WIN32 API (5)
저 하늘의 구름처럼~
과제를 하면서 스파이를 돌려보고나서야 알게된 사실이 있다. 만약 윈도우가 최대라면, 비클라이언트 영역인 타이틀 바를 클릭할 경우, WM_NCLBUTTONDWON후 WM_NCLBUTTONUP이벤트가 발생하지만, 윈도우의 크기가 최대가 아닌경우, WM_NCLBUTTONDOWN 이벤트 발생후 NC계열 메시지가 아닌 WM_LBUTTONUP 이벤트가 발생한다.
void CTestButtonDlg::OnLButtonDown(UINT nFlags, CPoint point) { DefWindowProc(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); } 간단하게 DefWindowProc로 처리하여 주면된다. 원래 캡션바 영역에는 WM_NCLBUTTONDOWN 이벤트가 발생하고, 그외의 영역에서는 WM_LBUTTONDOWN 이벤트가 발생하는데, 일반적인 영역에서도 WM_NCBUTTONDOWN이벤트가 일어나는 것으로 바꾸게 되면, 윈도우의 이동이 가능해지는 것이다.
전역 마우스 후킹을 하고자 하면, 후킹 모듈을 dll로 만들어야만 한다. 그리고나서 dll 과 후킹 서버 프로그램이 서로 통신을 하여야 하는데, 이때 SendMessage가 사용 된다. SendMessage로 메시지를 전달하기 위해서는 dll과 후킹 서버 프로그램 간에 서로 통신하기 위한 연결이 필요로 한데,이때 고유한 메시지임을 식별이 필요한데, 이것은 RegisterWindowMessage 라는 함수를 통해 등록이 가능하다. UINT hooktest = RegisterWindowMessage("Hook_Test"); 와 같이 dll 측에 통신을 위한 메시지 값을 등록 시켜 주어야 한다. 마찬가지로 후킹 프로그램 측에서도 이러한 절차가 필요하게 되는데, UINT LMOUSE_UP_HOOK = ::Reg..
PostMessage의 경우 윈도우의 메시지 큐에 메시지가 들어가게 되고, 윈도우 프로시저에게 이메시지 를 처리하도록한다. 메시지를 큐에 넣기만 하고 바로 리턴하므로 메시지를 붙인 후 즉시 다른 작업 을 할 수 있게 되지만 큐에 대기하고 있는 다른 메시지가 있으면 뒤에 붙인 메시지는 곧바로 처리되지 않는 특징을 가지고 있다.큐에 붙여진 메시지는 GetMessage에 의해 읽혀지고,DispatchMessage 함수에 의해 윈도우 프로시저로 보내어져 처리가 된다.SendMessage는 메시지를 큐에 넣는 것이 아니라 곧바로 윈도우 프로시저로 보내 즉각 처리하도록 하며 메시지가 완전히 처리되기 전에는 리턴하지 않고, 블록 시켜서 대기 상태로 만든다.정리해보면, SendMessage는 메시지를 바로 처리하고,P..
인터넷에서 어느 한 카페에서 이에 관해서 간략한 글을 보았다. 윈도우는 메시지 방식으로 프로그램이 구동하게 되고, WPARAM 이나 LPARAM은 모두 마이크로 소프트에서 지정해 놓은 형식으로써, 구체적으로 어떤 정보인지는 정확히는 아는 사람이 없다는 것으로 되어 있었다. 그리고, WPARAM은 자주 쓰이는 정보를, LPARAM은 추가 정보를 기술하도록 되어 있다고 한다. 더 나아가, 어떠한 형태인지 알아 보기 위해서 WPARAM과 LPARAM의 정의를 따라가 보면, wparam,lparam의 정의를 따라 가보면, typedef UINT_PTR wparam;이라고 선언되어 있고, 다시 UINT_PTR을 따라 들어가보면, typedef _W64 unsigned int UINT_PTR;이라고 선언되어 있다...