簡體   English   中英

使用win32 C ++和hooks從應用程序中的按鈕獲取文本

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

我試圖使用Winapi檢索Calculator(calc.exe)上的按鈕文本。 我已掛鈎WH_CALLWNDPROC並且鈎子工作正常。 但是我無法檢索任何按鈕的文本(比如數字7)。 我正在使用GetDlgItemText:

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

這里0x7068c是數字7按鈕的父窗口句柄,而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來掛鈎DrawTextW,DrawTextExW,ExtTextOutW API函數來檢索按鈕,標簽等文本。在鈎子函數中,我能夠檢索文本。 這個SO線程對我很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM