चीजों का एक गुच्छा करने की कोशिश की लेकिन मैं अपने टास्कबार को मेरे डेस्कटॉप यूआई पर नियुक्त और अन्य अलौकिक प्रभावों के बीच लगातार काम नहीं कर सकता।"विंडोज हुक" सिस्टम को कैसे जोड़ा जाए ताकि विंडोज़ को बनाया/सक्रिय किया जा सके?
पहले ओपन-लाइब्रेरी http://mwinapi.sourceforge.net/ का उपयोग करने का प्रयास किया। हालांकि यह विंडोज़ और सामान की गणना के लिए एक ओओ परत के रूप में अच्छी तरह से काम किया। यह हुक ठीक से नहीं कर सका
अगला स्टॉप Dino E.'s post on Windows Hooks in the .Net framework था। मैंने अपना खुद का प्रकार लिखना समाप्त कर दिया क्योंकि मैं पाठ को समझ रहा था और इसे काम करने की कोशिश कर रहा था।
मेरा इरादा यह ऐप चलाना है और यह चलाते समय सभी बनाई गई विंडो को लॉग इन करने में सक्षम है। सभी आंखों रही है ...
अद्यतन: कतरना जाहिरा तौर पर आप can't write global windows hooks in .Net के बाद से/प्रबंधित कोड (कुछ निम्न स्तर माउस या कीबोर्ड हुक को छोड़कर)
तो मैं सेल्सियस तक ++ का बदला है। फिर भी सभी WinAPI कॉल वैध हैंडल लौटाते हैं लेकिन मुझे मेरा फ़िल्टर फ़ंक्शन नहीं दिख रहा है - ऐसा लगता है कि कोई सूचना प्राप्त नहीं हो रही है। अभी भी काम नहीं करता ... क्या कोई गलती को देख सकता है।
void CWinHookFacade::Hook()
{
HMODULE hCurrentDll = LoadLibrary(_T("[Path to my hook dll]"));
m_HookHandle = SetWindowsHookEx(WH_CBT,
FilterFunctionForHook,
hCurrentDll,
0);
if (m_HookHandle == NULL)
{
throw new std::exception("Unable to hook");
}
}
void CWinHookFacade::Unhook()
{
if (!UnhookWindowsHookEx(m_HookHandle))
{
throw new std::exception("Unhook failed!");
}
m_HookHandle = NULL;
}
LRESULT CWinHookFacade::FilterFunctionForHook(int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
switch(code)
{
case HCBT_CREATEWND:
wprintf(_T("Created Window"));
break;
case HCBT_ACTIVATE:
wprintf(_T("Activated Window"));
break;
case HCBT_DESTROYWND:
wprintf(_T("Destroy Window"));
break;
}
}
return CallNextHookEx(m_HookHandle, code, wParam, lParam);
}
ग्राहक exe इस
int _tmain(int argc, _TCHAR* argv[])
{
CWinHookFacade::Hook();
getchar();
CWinHookFacade::Unhook();
}
स्पष्टीकरण के लिए - SetWindowsHookEx हर बार एक मान्य हैंडल देता है। अगर कोई भी इसे आजमा देना चाहता है, तो उपरोक्त कोड में कोई अन्य निर्भरता नहीं है। एक रिक्त प्रोजेक्ट में एक .cs फ़ाइल में पेस्ट करें और चलाएं। – Gishu