Frage

Ich habe ein Qt Dll weicht ich in eine Drittanbieter-Anwendung zu injizieren mit Windows Umwegen Bibliothek:

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

und dann stelle ich eine systemweite Haken Fenstererstellung abfangen:

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

Wo XOR meine Programme Name und Status-:: getInstance () ist ein Singleton, wo ich Globals halten.

In meinem CBTProc Rückruf, ich will alle Fenster abfängt, die QWidgets sind:

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

, die gut funktioniert, da ich einen entsprechenden HWND (Ich habe mit Spy ++) erhalten Dann möchte ich einen Zeiger auf die QWidget bekommen, so kann ich seine Funktionen zur Verfügung:

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

, aber hier ist das Problem, der zurückgegebene Zeiger immer 0. Am ist ich nicht richtig meinen Code in den Prozess Injektion? Oder bin ich nicht QWidget mit :: find (), wie ich sollte?

Danke,

Dave

EDIT: Wenn ich die QWidget ändern :: find () Funktion zu einer exportierten Funktion meiner DLL, nachdem die Haken Einstellung (so kann ich und einen Haltepunkt fangen), QWidgetPrivate :: Mapper ist NULL

.
War es hilfreich?

Lösung

Beantwortet:

dummer Fehler, ich war in Debug kompilieren, so war es QtGui4d.dll und QtCore4d.dll dass dort, wo Laden, nicht QtCore4.dll und QtGui.dll

Andere Tipps

Vergleichen Sie die Adressen von `QWidgetPrivate :: Mapper in der DLL und in Ihrem Code. Esp. wenn man statisch verknüpft ist, könnte es zwei Instanz davon sein, die jeweils mit einer eigenen, separaten, Satz von Widgets.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top