2011-01-05 11 views
1

Ich habe eine DLL in einem Adressbereich von Drittanbietern, die mit einem cbt-Hook verknüpft ist. Allerdings, wenn ich versuche, dies zu tun:Kann nicht finden, dass ein Drittanbieter-QWidget mit injiziertem Code & QWidget :: find (hwnd)

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

Ich weiß, dass das Widget gibt es, die Hwnd richtig ist, ich kann nicht scheinen, einen Zeiger auf sie zu bekommen.

Nach allem, was ich gelesen habe, sollte dies funktionieren, aber es immer Null zurück, kann jemand vorschlagen, warum?

C++ visual-studio-2008

Danke.

Antwort

0

Wie wäre es mit QApplication, eine Liste aller Widgets zu bekommen und dann ihre jeweiligen Fenster-IDs zu überprüfen?

So etwas wie

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

, die wie eine gute Idee scheint :) ich es versucht, aber es kam wieder leer. Ich denke, so ist das Projekt aufgebaut. Ich habe meine .dll hat alle Verbindungen zu den QtCore4 und QtGui4 dlls, und dann wird dies in die Drittanbieter-App geschoben. Ich denke, dass sie ihre eigenen Versionen der DLLs verwenden, weshalb ich sie nicht finden kann, klingt das sogar richtig? - völlig neu in qt. – flavour404

+0

@ Flavour404: Das könnte der Fall sein. Wenn Sie zwei Instanzen der gleichen DLLs haben, werden Sie auch mit z. zwei Instanzen jeder statischen Variablen, einschließlich der für die QApplication. –

+0

Frank, wie würde ich dieses Problem umgehen? – flavour404