ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows Mobile에서 Mouse Hook...
    공장 이야기 2010. 8. 13. 17:18

    반듯이 DLL 형태로 만들어 져야 한다... 자 코드 나갑니다.ㅋ

    P.S 풀 소스를 첨부 합니다.^^

     

    MouseHook.zip

     

     

    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     5

    typedef 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.zip
    0.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
Designed by Tistory.