見つけ::注入されたコード&QWidgetのでサードパーティのQWidgetを見つける(HWND)

StackOverflow https://stackoverflow.com/questions/1173740

質問

私は、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つのインスタンス、それ自身、ばらばらとそれぞれ、ウィジェットのセットがあるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top