Question

J'ai un Wich Qt dll j'injecte dans une application tierce utilisant des fenêtres bibliothèque detours:

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))

et puis je mets un crochet échelle du système pour intercepter la création de la fenêtre:

HHOOK h_hook = ::SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, Status::getInstance()->getXORInstance(), 0);

Où XOR est mon nom de programmes, et le statut :: getInstance () est un Singleton où je garde GLOBALS.

Dans mon rappel CBTProc, je veux intercepter toutes les fenêtres qui sont QWidgets:

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

qui fonctionne bien, puisque je reçois un HWND correspondant (j'ai vérifié avec Spy ++) Ensuite, je veux obtenir un pointeur sur le QWidget, afin que je puisse utiliser ses fonctions:

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

mais voici le problème, le pointeur de retour est toujours 0. Suis-je pas injecter mon code dans le processus correctement? Ou suis-je pas en utilisant QWidget :: find () que je devrais?

Merci,

Dave

EDIT: Si je change la fonction QWidget :: find () à une fonction exportée de ma DLL, après avoir réglé les crochets (je peux régler et prendre un point d'arrêt), QWidgetPrivate :: Mapper est NULL

.
Était-ce utile?

La solution

Répondu:

erreur stupide, je compilait dans Debug, il était donc QtGui4d.dll et QtCore4d.dll que lorsque le chargement, pas QtCore4.dll et QtGui.dll

Autres conseils

Comparez les adresses de `QWidgetPrivate :: mappeur dans la DLL et dans votre code. Esp. si l'on est lié statiquement, il pourrait y avoir deux cas de celui-ci, chacun avec ses propres, disjoints, ensemble de widgets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top