見つけ::注入されたコード&QWidgetのでサードパーティのQWidgetを見つける(HWND)
-
19-09-2019 - |
質問
私は、Windowsの迂回ライブラリを使用してサードパーティのアプリケーションに注入のQtのDLLのウィッヒを持っています
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()私はグローバルを保つシングルトンである。
私のCBTProcコールバックでは、私はQWidgetsているすべてのウィンドウをインターセプトしたい:
HWND hwnd= FindWindow(L"QWidget", NULL);
私は(私はスパイでチェック++)対応HWNDを取得するので、うまく機能 その後、私はQWidgetのへのポインタを取得したいので、私はその機能を使用することができます:
QWidget* q = QWidget::find(hwnd);
が、ここが問題だ、返されたポインタは常に私がきちんとプロセスに私のコードを注入しない0アムのですか?それとも私が必要としてのQWidget ::は()を見つける使用していないのですか?
おかげで、
デーブ
編集:私はQWidgetのを変更した場合::、(私はブレークポイントを設定し、キャッチすることができます)フックを設定した後、私のDLLのエクスポート関数にQWidgetPrivateを()関数を見つけ::マッパーはNULLです。
。解決
回答:
それはQtGui4d.dllとQtCore4d.dllそのロードではなく、QtCore4.dllとQtGui.dll だったので愚かな間違いを、私は、デバッグでコンパイルされました
他のヒント
DLLにし、あなたのコード内でQWidgetPrivate ::マッパー `のアドレスを比較してください。 ESPの。 1が静的にリンクされている場合、それの2つのインスタンス、それ自身、ばらばらとそれぞれ、ウィジェットのセットがあるかもしれません。
所属していません StackOverflow