我有一个Qt的Dll至极我注入使用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,我保持全局。

在我CBTProc回调,我想拦截的QWidgets所有窗口:

HWND hwnd= FindWindow(L"QWidget", NULL);
效果很好,因为我得到一个相应的HWND(I与间谍检查++)

然后,我想获得一个指向QWidget的,这样我就可以使用它的功能:

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

但这里的问题,返回的指针始终是0。我不能注入我的代码到进程正常吗?还是我没有使用了QWidget :: find()方法,我应该?

谢谢,

戴夫

编辑:如果我改变QWidget的::找到()函数以我的DLL的导出函数,设置钩后(以便设定和捕捉断点),QWidgetPrivate ::映射器是NULL

有帮助吗?

解决方案

已经回答了:

愚蠢的错误,我被编译在调试,所以这是QtGui4d.dll和QtCore4d.dll但如装载,未QtCore4.dll和QtGui.dll

其他提示

比较的`QWidgetPrivate ::映射地址在DLL和你的代码。 ESP。如果一个静态链接,有可能是它的两个实例,每个都有它自己的,不相交,设置构件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top