У меня есть Wich Qt 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 мое имя программы, и статус :: деЫпзЬапс() является Singleton, где я держу глобал.
В моей CBTProc обратный вызов, я хочу, чтобы перехватывать все окна, которые QWidgets:
HWND hwnd= FindWindow(L"QWidget", NULL);
, который хорошо работает, так как я получаю соответствующий HWND (я проверил с Spy ++) Тогда, я хочу, чтобы получить указатель на QWidget, так что я могу использовать свои функции:
QWidget* q = QWidget::find(hwnd);
, но вот проблема, возвращаемый указатель всегда равен 0. может ли я не инъекционная свой код в процесс правильно? Или я не использую QWidget :: find(), как должен?
Спасибо,
Dave
EDIT: Если я изменить QWidget :: найти() для экспортируемой функции моей DLL, после установки крюков (так что я могу установить и поймать точку останова) , QWidgetPrivate :: mapper - NULL.
Можете ли вы шаг в 'QWidget :: find() 'с отладчиком и посмотреть, является ли' QWidgetPrivate :: mapper' 'NULL' или нет? – Paul
QWidget :: find() находится в обратном вызове CBT_Proc, и точка останова не может попасть туда ... есть ли другой способ проверить это? и если это NULL, что мне тогда делать? –
В случае, если ваше задание «Как он знает, что код будет выполнен?», Я печатаю на консоли. –