العثور على الطرف الثالث Qwidget مع رمز حقن و Qwidget :: Find (HWND)

StackOverflow https://stackoverflow.com/questions/1173740

سؤال

لدي QT DLL الذي حقنه في تطبيق تابع لجهة خارجية باستخدام مكتبة Detours Windows:

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 () هو Singleton حيث أظل Globals.

في اتصال CBTProc الخاص بي، أريد اعتراض جميع النوافذ التي هي qwidgets:

HWND hwnd= FindWindow(L"QWidget", NULL);

الذي يعمل بشكل جيد، لأنني أحصل على HWND المقابلة (راجعت مع التجسس ++)، فأنا أريد الحصول على مؤشر إلى Qwidget، لذلك يمكنني استخدام وظائفها:

QWidget* q = QWidget::find(hwnd);

ولكن هذه هي المشكلة، المؤشر المرتجع هو دائما 0. أنا لست حقن الشفهري في العملية بشكل صحيح؟ أو أنا لا أستخدم Qwidget :: Find () كما يجب علي؟

شكرًا،

ديف

عدل

هل كانت مفيدة؟

المحلول

أجاب:

خطأ غبي، كنت أرجو في تصحيح، لذلك كان Qtgui4d.dll و Qtcore4d.dll أنه حيث التحميل، وليس Qtcore4.dll و Qtgui.dll

نصائح أخرى

قارن عن عناوين `qwidgetprivate :: mapper في DLL وفي التعليمات البرمجية الخاصة بك. esp. إذا تم ربط المرء بشكل شروي، فقد يكون هناك مثيلين منه، ولكل منهما، فكاه، مجموعة من الحاجيات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top