Ho un wich Qt Dll faccio l'iniezione in un'applicazione di terze parti utilizzando finestre deviazioni libreria:Trovare un QWidget 3rd party con il codice iniettato e QWidget :: trovare (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))
e poi ho impostare un a livello di sistema per intercettare gancio creazione finestra:
HHOOK h_hook = ::SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, Status::getInstance()->getXORInstance(), 0);
dove XOR è il mio nome programmi e Stato :: getInstance() è un Singleton dove tengo globali.
Nel mio CBTProc callback, voglio intercettare tutte le finestre che sono QWidgets:
HWND hwnd= FindWindow(L"QWidget", NULL);
che funziona bene, dal momento che ho un corrispondente HWND (ho controllato con Spy ++) Poi, voglio ottenere un puntatore al QWidget, in modo da poter utilizzare le sue funzioni:
QWidget* q = QWidget::find(hwnd);
ma qui è il problema, il puntatore restituito è sempre 0. non sono io iniettare il mio codice nel processo in modo corretto? O non sto usando QWidget :: find() come dovrei?
Grazie,
Dave
EDIT: Se cambio la QWidget :: trovare() per una funzione esportata della mia DLL, dopo aver impostato i ganci (in modo da poter impostare e prendere un punto di interruzione) , QWidgetPrivate :: mapper è NULL.
Can you entrare in 'QWidget :: find() 'con debugger e vedere se' QWidgetPrivate :: mapper' è 'NULL' o no? – Paul
QWidget :: find() è nel callback CBT_Proc e un punto di interruzione non può sembrare essere colpito lì ... c'è qualche altro modo per verificarlo? e se è NULL, cosa faccio allora? –
Nel caso in cui ti chiedessi "Come fa a sapere che il codice viene eseguito allora?", Sto stampando nella console. –