【问题标题】:Cant find a 3rd party QWidget with injected code & QWidget::find(hwnd)找不到带有注入代码和 QWidget::find(hwnd) 的第 3 方 QWidget
【发布时间】:2011-01-05 00:05:22
【问题描述】:

我在第三方地址空间中有一个 dll,使用 cbt 挂钩挂钩。但是,当我尝试这样做时:

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

谢谢。

【问题讨论】:

    标签: qt dll hook code-injection qwidget


    【解决方案1】:

    如何使用 QApplication,获取所有小部件的列表,然后检查它们各自的窗口 ID?

    类似

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

    【讨论】:

    • 这似乎是个好主意 :) 我试过了,但它还是空了。我认为这是项目的设置方式。我的 .dll 具有与 QtCore4 和 QtGui4 dll 的所有连接,然后将其推送到第三方应用程序中。我认为他们每个人都在使用自己的 dll 版本,这就是为什么我找不到他们,这听起来对吗? - 对 qt 来说是全新的。
    • @flavor404:很可能就是这样。如果您有两个相同 DLL 的实例,您最终也会得到例如每个静态变量的两个实例,包括 QApplication 的一个。
    • 弗兰克,实际上我怎么能测试这个,以便我可以确认这实际上是出了什么问题,可以这么说?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2013-06-23
    • 2016-08-22
    相关资源
    最近更新 更多