Получить текст от кнопки в приложении, используя Win32 C++ и хуки
Я пытаюсь получить текст кнопки на калькуляторе (calc.exe) с помощью Winapi. Я подключил WH_CALLWNDPROC, и ловушка работает отлично. Но я не могу получить текст любой кнопки (скажем, цифра 7). Я использую GetDlgItemText:
TCHAR text[256];
GetDlgItemText((HWND)0x7068c, 0x89, text, strlen(text));
Здесь 0x7068c - это дескриптор родительского окна для цифровой кнопки 7, а 0x89 - его управляющий идентификатор. Текст не возвращается, хотя я могу нажать на него программно.
Что я делаю неправильно? Я пытался использовать SendMessage с WM_GETTEXT, но он все еще не работает. Я хочу использовать этот подход и извлекать текст из кнопок, текстовых полей в других приложениях.
2 ответа
Я наконец преуспел в этом, используя EasyHook для перехвата функций API DrawTextW, DrawTextExW, ExtTextOutW для извлечения текста с кнопок, надписей и т. Д. В перехваченных функциях я смог получить текст. Эта ТАКАЯ ветка мне очень помогла.
Вы можете просто использовать 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;
}