मैं हुक्स के साथ कुछ बातें की कोशिश कर रहा है, और मुझे समझ नहीं आता क्यों हुक एक संदेश कतार के साथ इस्तेमाल किया जाना चाहिए साथ प्रयोग किया जा SetWindowsHookEx चाहिएक्यों एक विंडोज़ संदेश कतार
hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);
क्यों कुछ नहीं है इस काम की तरह?
hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, 0);
cin >> aKey;
UnhookWindowsHookEx(hook);
बढ़ावा धागे का उपयोग करना, और एक बाधा या तो काम नहीं करता। हुक और अनहूक के बीच इंतजार क्यों नहीं किया जा सकता है?
संपादित करें:
मैं एक गलती जब मैं इस नमूना बनाया है, मैं एक WH_KEYBOARD_LL हुक, WH_KEYBOARD नहीं, (मुझे नहीं लगता कि यह एक बड़ा फर्क नहीं पड़ता है)
इसके अलावा पाश कभी नहीं कार्यान्वित बनाया था केवल GetMessage फ़ंक्शन पर प्रतीक्षा करता है।
लूप निष्पादित करता है जब मैं छोड़ संदेश PostThreadMessage(id, WM_QUIT, 2323, NULL);
पोस्ट करता हूं तो मुझे समझ में नहीं आता कि यह प्रतीक्षा के बगल में क्या करता है, क्या कुछ आंतरिक प्रसंस्करण है?
संबंधित:
C++ SetWindowsHookEx WH_KEYBOARD_LL Correct Setup
How can I set up a CBT hook on a Win32 console window?
तो, अगर मैं इसे सही ढंग से समझता हूं, तो विंडोज केवल मेरे कॉलबैक को कॉल/पेकमेसेज() कॉल में कॉल कर सकता है? – Ha11owed
आप इसे सही ढंग से समझते हैं। थ्रेड में सुरक्षित रूप से कॉल इंजेक्ट करने का कोई अन्य तरीका नहीं है, इसे निष्क्रिय होना चाहिए। यही कारण है कि संदेश loops मौजूद हैं। –
@ हंसपैसेंट को स्पष्टीकरण देने के लिए, क्या आप सुझाव दे रहे हैं कि ग्लोबल हुक जैसे WH_KEYBOARD नामित पाइप का उपयोग मेरे स्वयं के कार्यक्रम में "पास" जानकारी के लिए किया जा सकता है और उस कार्यक्रम को संदेश पंप की आवश्यकता नहीं है? – dave