2011-01-05 6 views
1

私はcbtフックを使ってフックして、サードパーティのアドレス空間にDLLを持っています。しかし、ときに私がしようとすると、この操作を行います。私はサードパーティのQWidgetを注入コード&QWidget :: find(hwnd)で見つけました

HWND hwnd = FindWindow(wct_target_wnd); 
    QWidget* widget = QWidget::find(hwnd); 
    if(widget != 0) 
    { 
     MessageBox(NULL, L"worked\n",NULL, NULL); 
    } 

を私はHWNDが正しいと、ウィジェットがあると知って、私はそれへのポインタを取得するように見えることはできません。

私が読んだことすべてによれば、これはうまくいくはずですが、常にゼロを返します。だれかがなぜ示唆できますか?

C++ visual-studio-2008

ありがとうございます。

答えて

0

QApplicationを使用して、すべてのウィジェットのリストを取得し、それぞれのウィンドウIDをチェックするのはどうですか?良いアイデアだと思い

foreach (QWidget *widget, QApplication::allWidgets()) 
{ 
    if(widget->winId() == hwnd) 
    { 
     MessageBox(NULL, L"worked\n",NULL, NULL); 
    } 
} 
+0

よう

何か:)私はそれを試してみましたが、それは空戻ってきました。私はそれがプロジェクトが設立された方法だと思う。私は自分の.dllにQtCore4とQtGui4 dllのすべての接続があり、それがサードパーティのアプリケーションにプッシュされています。私は彼らがそれぞれ独自のバージョンのDLLを使用していると思うので、私はそれらを見つけることができないのですが、これは正しいでしょうか? - Qtの全く新しい。 – flavour404

+0

@flavour404:そうかもしれない。同じDLLのインスタンスが2つある場合は、たとえば次のようになります。各静的変数の2つのインスタンス(QApplication用インスタンスを含む)。 –

+0

フランク、どうすればこの問題を回避できますか? – flavour404

関連する問題