Невозможно получить hwnd кнопки внутри диалогового окна вкладки - MFC C++
Я работаю над тем, чтобы получить
hwnd
с помощью курсора мыши, указывающего на кнопку. Проблема в том, что я не могу дотянуться до кнопки, которая находится внутри диалогового окна вкладки.Я использовал Spy++, чтобы получить иерархию, есть 3 слоя, чтобы добраться до нужной кнопки. Главное окно (#32770) - Таб1 (#32770) - Btn1 (Кнопка) Это показывает, что Вкладке tab1 не воспитан, чтобы Это systabcontrol32 и иметь одно и то же родительское окно с Это systabcontrol32.
Вместо того чтобы получить Btn1, Я всегда получаю Это systabcontrol32, который имеет тот же уровень иерархии, что и Вкладке tab1, означает, что я могу достичь только Это systabcontrol32 но не тот Вкладке tab1.
Если бы я использовал
WindowFromPoint
и наведи на меня мышку Btn1, Я получу Это systabcontrol32; с помощью ChildWindowFromPoint
, Я получу 0 в качестве возвращаемого значения; используя RealChildWindowFromPoint
, Я получу Это systabcontrol32.Шпион++ только может обнаружить Главное окно, Это systabcontrol32 и Вкладке tab1 но он не может обнаружить Btn1. Я могу получить все дочерние окна с помощью
EnumChildWindow
но ...WindowFromPoint
функция все еще не может найти Вкладке tab1 и эти детские окна. Кроме того, Spy++ способен выделить Btn1 после того, как я "выделю" его, но если я использую функцию "Найти окно" в Spy++, Btn1 не может быть обнаружен.Это ли причина в том, что перекрытие родственных окон? Похоже Это systabcontrol32 это продолжайте блокировать
...WindowFromPoint
функция для получения дочерних окон. Кто-нибудь знает, в чем причина этой ситуации и как ее решить? Пожалуйста помочь..СпасибоЧто я уже пробовал:
#include<windows.h> #include<iostream> using namespace std; int main() { POINT pt; Sleep(3000); GetCursorPos(&pt); HWND hWnd = WindowFromPoint(pt); HWND hWndParent = GetParent(hWnd); MapWindowPoints(NULL, hWndParent, &pt, 1); HWND hWndChild = RealChildWindowFromPoint(hWndParent,pt); char class_name[100]; char title[100]; GetClassNameA(hWndChild,class_name, sizeof(class_name)); GetWindowTextA(hWndChild,title,sizeof(title)); cout <<"Window name : "<<title<<endl; cout <<"Class name : "<<class_name<<endl; cout <<"hwnd : "<<hWndChild<<endl<<endl; system("PAUSE"); return 0; }
Shao Voon Wong
Из вашего фрагмента кода это выглядит как не код MFC. Пожалуйста, опубликуйте фактический проблемный код, потому что приложение WinAPI запускается в WinMain (), а не main().
Josh_0101
Я делаю это как простое кодирование на C++ и тестирую его в консоли. Это небольшая часть приложения MFC, которую я отлаживаю.
Shao Voon Wong
Вы пытаетесь получить HWnd из других приложений, не написанных вами? Даже если вы получили их HWnd, вы не можете отправить им SendMessage (), потому что в современных операционных системах Windows MS запрещает межпроцессную связь через отправку сообщения WinAPI из-за проблем безопасности.
Josh_0101
Я могу получить некоторые hwnd из приложения, но я обнаружил, что некоторые элементы управления внутри диалогового окна вкладки не могут быть получены. Эти объяснения основаны на моем понимании из Spy++. Возможно, чтобы получить отсюда какое-то представление о том, что является первопричиной и есть ли для нее какое-то решение.
Shao Voon Wong
Почему вы пытаетесь получить HWNDs от Spy++? Что вы собираетесь делать с hwnd?
Josh_0101
Я использую Spy++ для проверки иерархии окна, чтобы решить, какую функцию окна следует использовать. Цель состоит в том, чтобы получить правильный заголовок окна, когда курсор мыши указывает на него.
Shao Voon Wong
Вы просто пытаетесь украсть конфиденциальную информацию, такую как биткойн-кошелек, пароль, серийный номер или номера кредитных карт. Если даже Spy++ не может видеть HWND, вы можете забыть о получении HWND, потому что элемент управления может даже не реализовываться с помощью HWND.
Josh_0101
Похоже, вы неправильно поняли, о чем я спрашиваю. Я могу получить все HWND, обратившись к иерархии, показанной в Spy++. Эти HWND не скрыты, и я могу получить всю информацию, просто функция WindowFromPoint не смогла до них добраться. К сожалению, я новичок в этом деле, и для меня это будет долгий путь, если я захочу использовать эти знания для кражи конфиденциальной информации. Спасибо за предложение, но оно неприменимо.