मैं एक क्यूटी Dll जो मैं एक तीसरे पक्ष विंडोज़ का उपयोग आवेदन में इंजेक्षन है के साथ एक 3 पार्टी QWidget ढूँढना पुस्तकालय चक्करदार मार्ग:इंजेक्शन कोड और QWidget :: लगता है (hwnd)
if(!DetourCreateProcessWithDll(Path, NULL, NULL, NULL, TRUE,
CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, NULL,
&si, &pi, "C:\\Program Files\\Microsoft Research\\Detours Express 2.1\\bin\\detoured.dll",
"C:\\Users\\Dave\\Documents\\Visual Studio 2008\\Projects\\XOR\\Debug\\XOR.dll", NULL))
और उसके बाद मैं एक सेट पूरे सिस्टम में हुक खिड़की निर्माण रोकना:
HHOOK h_hook = ::SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, Status::getInstance()->getXORInstance(), 0);
कहाँ XOR मेरे कार्यक्रमों नाम, और स्थिति :: getInstance() एक सिंगलटन जहाँ मैं वैश्विक रखना है।
HWND hwnd= FindWindow(L"QWidget", NULL);
जो अच्छी तरह से काम करता है, के बाद से मैं एक इसी HWND मिल (आई स्पाई ++ के साथ की जाँच) फिर, मैं एक प्राप्त करना चाहते हैं:
मेरी CBTProc कॉलबैक में, मैं सभी खिड़कियां कि QWidgets हैं रोकना चाहते हैं QWidget सूचक है, इसलिए मैं अपने कार्यों का उपयोग कर सकते हैं:
QWidget* q = QWidget::find(hwnd);
लेकिन यहाँ समस्या है, लौटे सूचक हमेशा 0. Am मैं ठीक से प्रक्रिया में मेरी कोड इंजेक्शन लगाने के नहीं है? या मैं QWidget :: find() का उपयोग नहीं कर रहा हूं जैसा मुझे करना चाहिए?
धन्यवाद,
डेव
संपादित करें: अगर मैं बदल QWidget :: लगता है() मेरी DLL के निर्यात समारोह के लिए समारोह, हुक सेट करने के बाद (तो मैं सेट और एक ब्रेकपाइंट पकड़ कर सकते हैं) , QWidgetPrivate :: मैपर शून्य है।
आप 'QWidget में कदम कर सकते हैं :: डीबगर के साथ ढूंढें() 'और देखें कि 'QWidgetPrivate :: mapper'' NULL' है या नहीं? – Paul
QWidget :: find() CBT_Proc कॉलबैक में है और ब्रेकपॉइंट वहां हिट नहीं लग रहा है ... क्या यह सत्यापित करने का कोई अन्य तरीका है? और यदि यह शून्य है, तो मैं तब क्या करूँ? –
यदि आपकी सोच है कि "कोड कैसे निष्पादित होता है तो उसे पता चलता है?", मैं कंसोल में प्रिंट कर रहा हूं। –