-
Windows Mobile에서 Mouse Hook...공장 이야기 2010. 8. 13. 17:18
반듯이 DLL 형태로 만들어 져야 한다... 자 코드 나갑니다.ㅋ
P.S 풀 소스를 첨부 합니다.^^
LRESULT CALLBACK CMouseHook::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{if(nCode >= 0)
{
EVENTMSG *pEvent = (EVENTMSG*)lParam;if(NULL != CMouseHook::m_wndServer)
{
switch(pEvent->message)
{
case WM_LBUTTONDOWN:
::SendMessage(CMouseHook::m_wndServer, UM_LBUTTONDOWN, pEvent->paramH, pEvent->paramL);
break;
case WM_LBUTTONUP:
::SendMessage(CMouseHook::m_wndServer, UM_LBUTTONUP, pEvent->paramH, pEvent->paramL);
break;
}
}
}
return fnCallNextHookEx(m_hMouseHook, nCode, wParam, lParam);
}BOOL CMouseHook::InitHookProc(HWND wndHook)
{
m_dwErrorCode = 0;if(NULL == wndHook)
return FALSE;
m_wndServer = wndHook;m_hCore = ::GetModuleHandle(L"coredll.dll");
if(NULL == m_hCore)
{
m_dwErrorCode = ::GetLastError();return FALSE;
}fnQASetWindowsJournalHook = (QASETWINDOWSJOURNALHOOK)::GetProcAddress(m_hCore, L"QASetWindowsJournalHook");
if(NULL == fnQASetWindowsJournalHook)
{
m_dwErrorCode = ::GetLastError();return FALSE;
}fnQAUnhookWindowsJournalHook = (QAUNHOOKWINDOWSJOURNALHOOK)::GetProcAddress(m_hCore, L"QAUnhookWindowsJournalHook");
if(NULL == fnQAUnhookWindowsJournalHook)
{
m_dwErrorCode = ::GetLastError();return FALSE;
}fnCallNextHookEx = (CALLNEXTHOOKEX)::GetProcAddress(m_hCore, L"CallNextHookEx");
if(NULL == fnCallNextHookEx)
{
m_dwErrorCode = ::GetLastError();return FALSE;
}return TRUE;
}BOOL CMouseHook::SetMouseHook()
{
EVENTMSG emMouse;m_hMouseHook = fnQASetWindowsJournalHook(WH_JOURNALRECORD, (HOOKPROC)CMouseHook::MouseHookProc, &emMouse);
if(NULL == m_hMouseHook)
return FALSE;return TRUE;
}BOOL CMouseHook::UnHookMouse()
{
fnQAUnhookWindowsJournalHook(WH_JOURNALRECORD);return TRUE;
}===========================================================================================================
.h
#define WH_JOURNALRECORD 0
#define WH_JOURNALPLAYBACK 1#define HC_ACTION 0
#define HC_GETNEXT 1
#define HC_SKIP 2
#define HC_NOREMOVE 3
#define HC_NOREM HC_NOREMOVE
#define HC_SYSMODALON 4
#define HC_SYSMODALOFF 5typedef struct {
UINT message;
UINT paramL;
UINT paramH;
DWORD time;
HWND hwnd;
} EVENTMSG, *PEVENTMSG;// Hooking
typedef LRESULT (WINAPI* HOOKPROC)(int, WPARAM, LPARAM);
typedef LRESULT (WINAPI* CALLNEXTHOOKEX)(HHOOK, int , WPARAM, LPARAM);// Journal(Mouse)
typedef HHOOK (WINAPI*QASETWINDOWSJOURNALHOOK)(int, LPVOID, EVENTMSG*);
typedef HHOOK (WINAPI*QAUNHOOKWINDOWSJOURNALHOOK)(int);#define UM_LBUTTONDOWN WM_USER+100
#define UM_LBUTTONUP WM_USER+101
// 이 클래스는 MouseHook.dll에서 내보낸 것입니다.
class MOUSEHOOK_API CMouseHook
{
public:
CMouseHook(void);
// TODO: 여기에 메서드를 추가합니다.private:
static LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam);// Member Function
private:protected:
public:
BOOL InitHookProc(HWND wndHook);
BOOL SetMouseHook();
BOOL UnHookMouse();
// Member Variable
private:protected:
public:
static HMODULE m_hCore;
static HHOOK m_hMouseHook;
static HWND m_wndServer;DWORD m_dwErrorCode;
};extern MOUSEHOOK_API int nMouseHook;
MOUSEHOOK_API int fnMouseHook(void);
MouseHook.zip0.01MB'공장 이야기' 카테고리의 다른 글
IDOMNode에서 WebCore::Node로 변환하기 (0) 2011.05.04 Windows XP에서 WebKit 빌드 하기 (0) 2011.02.25 Process Kill (0) 2010.04.22 Windows Mobile에서 키패드 변경 (0) 2010.04.19 SIP 제어... (0) 2010.01.22