मुझे काम करने के लिए वैश्विक प्रणाली हुक प्राप्त करने में परेशानी हो रही है। जब भी एक खिड़की चलती है, जितनी जल्दी हो सके, और खिड़की के आकार को बदलना चाहता हूं, मैं अधिसूचित होना चाहता हूं। इसका मतलब है कि सीबीटी हुक HCBT_MOVESIZE
इसे काट नहीं देगा, यह खिड़की के स्थानांतरित होने के बाद ही होता है। मैं खिड़की के वास्तविक आंदोलन को हुक करना चाहता हूं, और चाल के दौरान खिड़की के आकार को बदलने में सक्षम हूं।वैश्विक स्तर पर विंडो आंदोलन को अवरुद्ध करें
हुक एक डीएलएल से सेट हैं, और कॉलबैक फ़ंक्शन उस डीएलएल के भीतर है। मैंने यही कोशिश की है।
WH_CALLWNDPROC
। जब खिड़की चली जाती है तो यह मुझे सतर्क करता है (WM_MOVING
अन्य अनुप्रयोगों से विंडोज़ के लिए प्राप्त होता है), लेकिन मैं संदेश की सामग्री को नहीं बदल सकता।WH_CALLWNDPROCRET
WH_CALLWNDPROC
के समान।- सीबीटी हुक
HCBT_MOVESIZE
। घटना देर से होती है। WH_GETMESSAGE
।WM_MOVE
,WM_MOVING
याWM_WINDOWPOSCHANGING
कभी प्राप्त न करें। यह हुक मुझे संदेश बदलने की अनुमति देगा।
अद्यतन: विंडोज घटना हुक मुझे यह कब्जा करने के लिए अनुमति देने के लिए लग रहे हैं: SetWindowPos()
का उपयोग कर काम नहीं करता है विंडो के आकार बदल रहा है (यह परिवर्तन:
hWinEventHook = SetWinEventHook(EVENT_SYSTEM_MOVESIZESTART,
EVENT_SYSTEM_MOVESIZEEND, NULL, WinEventProc,
0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
बहरहाल, यह एक अलग समस्या पैदा करता है आकार ठीक है, लेकिन तुरंत अपने पिछले आकार में बदल जाता है), भले ही मैं SWP_NOSENDCHANGING
का उपयोग करता हूं। विचार?
अपडेट 2: सबक्लासिंग काम करने लगती है, हालांकि प्रत्येक प्रोग्राम चलाने के बाद विजुअल स्टूडियो क्रैश हो जाता है (इसलिए कई अन्य विंडोज़)। यह अच्छी तरह से काम करता है अगर मैं ब्रेकपॉइंट्स डालता हूं और "unsubclassing" के माध्यम से चलता हूं, लेकिन जब मैं प्रोग्राम को स्वयं चलाता हूं। विचार?
मैं (यह वहाँ पहले से था) एक सीबीटी हुक है, और HCBT_ACTIVATE
एक नई विंडो के लिए भेज दिया जाता है, जब भी, मैं किसी भी पिछले उपवर्गीकरण SetWindowLongPtr()
का उपयोग कर उपवर्ग निकाल सकते हैं (यह रूप में अच्छी तरह 64-बिट पर चलने के लिए है), और फिर नई खिड़की अगर मैं कहीं भी ब्रेकपॉइंट डालता हूं, और जब यह टूट जाता है तो तुरंत सत्र को फिर से शुरू करें, सब कुछ ठीक काम करता है। हालांकि, जब मेरे पास कोई ब्रेकपॉइंट नहीं होता है, तो जब प्रोग्राम निकलता है तो विजुअल स्टूडियो क्रैश हो जाता है।
'HCBT_MOVESIZE' के साथ क्या होता है यह है कि उपयोगकर्ता विंडो खींचने, इसे खींचने के लिए शुरू कर सकता है, और खिड़की जाने से पहले अधिसूचना नहीं पहुंचती है। फिर भी, खिड़की तकनीकी रूप से स्थानांतरित होने से पहले आपको अधिसूचना मिलती है, लेकिन यह अभी भी बहुत बेकार है। –