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

sta*_*ney 2 c++ hook winapi wndproc

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

TCHAR text[256];
GetDlgItemText((HWND)0x7068c, 0x89, text, strlen(text));
Run Code Online (Sandbox Code Playgroud)

这里0x7068c是数字7按钮的父窗口句柄,而0x89是它的控件ID.虽然我能够以编程方式单击它,但不会返回任何文本.

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

use*_*969 6

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

        #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;
        }
Run Code Online (Sandbox Code Playgroud)