2008-12-02 11 views
6

मैं एक कीबोर्ड हुक बना रहा हूं, जिसमें कीबोर्डप्रोक एक वर्ग CWidget का स्थिर सदस्य है।SetWindowsHookEx, कीबोर्डप्रोक और गैर स्थैतिक सदस्य

class CWidget 
{ 
    static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam); 

}; 

मैं CWidget :: कीबोर्डप्रोक के अंदर CWidget के गैर स्थैतिक सदस्यों को कॉल करना चाहता हूं।

ऐसा करने का सबसे अच्छा तरीका क्या है?

कीबोर्डप्रोक में 32 बिट डीडब्ल्यूओआर नहीं है जहां मैं 'यह' पॉइंटर पास कर सकता हूं।

उत्तर

6

को देखते हुए आप शायद केवल एक कुंजीपटल हुक एक समय में स्थापित करना चाहते है कि, बस अपने वर्ग के लिए एक स्थिर pThis सदस्य जोड़ने:

class CWidget 
{ 
    static HHOOK m_hHook; 
    static CWidget *m_pThis; 

public: 
    /* NOT static */ 
    bool SetKeyboardHook() 
    { 
     m_pThis = this; 
     m_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, /* etc */); 
    } 

    // Trampoline 
    static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) 
    { return m_pThis->KeyboardProc(code, wParam, lParam); } 

    LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam); 

    /* etc. */ 
}; 
संबंधित मुद्दे