使用win32c++和钩子从应用程序中的按钮获取文本

Get text from a button in an application using win32 C++ and hooks

本文关键字:按钮 获取 取文本 应用程序 win32c++ 使用      更新时间:2023-10-16

我正在尝试使用Winapi检索计算器(calc.exe)上的按钮文本。我已经钩了WH_CALLWNDPROC和钩子工作正常。但是我无法检索任何按钮的文本(说数字7)。我使用GetDlgItemText:

TCHAR text[256];
GetDlgItemText((HWND)0x7068c, 0x89, text, strlen(text));

这里0x7068c是数字7按钮的父窗口句柄,而0x89是它的控件id。不返回任何文本,但我可以通过编程方式单击它。

我做错了什么?我试图使用SendMessage与WM_GETTEXT,但它仍然不起作用。我想采取这种方法,并从按钮,文本框在其他应用程序检索文本。

您可以简单地使用Accessibility:

        #include "windows.h"
        #include "Oleacc.h"
        #include "atlbase.h"
        #pragma comment(lib,"Oleacc.lib")
        int main()
        {
            CComPtr<IAccessible> pAcc;
            VARIANT varChild;
            if (SUCCEEDED(AccessibleObjectFromWindow((HWND)0x000d18e0, 
                OBJID_WINDOW,IID_IAccessible, reinterpret_cast<void**>(&pAcc))))
            {
                CComBSTR bstrName;
                varChild.vt = VT_I4;
                varChild.lVal = CHILDID_SELF;
                if (SUCCEEDED(pAcc->get_accName(varChild, &bstrName)))
                {
                    wprintf(L"%s", bstrName.m_str);
                }
            }
            return 0;
        }

我终于成功地做到了这一点,通过使用EasyHook挂钩DrawTextW, drawtexw, ExtTextOutW API函数检索文本按钮,标签等。在钩子函数中,我能够检索文本。这个帖子对我帮助很大。