使用 win32 C++ 和挂钩从应用程序中的按钮获取文本

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

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

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

此处 0x7068c 是数字 7 按钮的父 window 句柄,而 0x89 是其控件 ID。没有返回文本,但我可以通过编程方式单击它。

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

您可以简单地使用辅助功能:

        #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 for hooking DrawTextW, DrawTextExW, ExtTextOutW API functions for retrieving the text off buttons, labels, etc. In the hooked functions I was able to retrieve the text. This SO thread成功了,对我帮助很大