2009-07-23 14 views
7

मैं एक क्यूटी 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 :: मैपर शून्य है।

+0

आप 'QWidget में कदम कर सकते हैं :: डीबगर के साथ ढूंढें() 'और देखें कि 'QWidgetPrivate :: mapper'' NULL' है या नहीं? – Paul

+0

QWidget :: find() CBT_Proc कॉलबैक में है और ब्रेकपॉइंट वहां हिट नहीं लग रहा है ... क्या यह सत्यापित करने का कोई अन्य तरीका है? और यदि यह शून्य है, तो मैं तब क्या करूँ? –

+0

यदि आपकी सोच है कि "कोड कैसे निष्पादित होता है तो उसे पता चलता है?", मैं कंसोल में प्रिंट कर रहा हूं। –

उत्तर

2

उत्तर दिया:

बेवकूफ गलती, मैं डीबग में संकलन किया गया था, तो यह QtGui4d.dll और QtCore4d.dll था कि जहां लोड हो रहा है, नहीं QtCore4.dll और QtGui.dll

+0

डेविड है, क्या आप मुझे ईमेल कर सकते हैं, [email protected] मेरे पास इसके बारे में कुछ सवाल हैं क्योंकि मैं कुछ ऐसा करने की कोशिश कर रहा हूं और अटक गया हूं। धन्यवाद। – flavour404

0

डीएलएल में और QDidgetPrivate :: मैपर के पते की तुलना करें और अपने कोड में। Esp। यदि कोई स्थैतिक रूप से जुड़ा हुआ है, तो इसका दो उदाहरण हो सकता है, प्रत्येक के साथ स्वयं, विवाद, विजेट का सेट।

+0

डीएलएल और मेरे कोड में आपका क्या मतलब है? डीएलएल मेरा कोड –