Win32Api - Свойство Имя окна - PullRequest
       15

Win32Api - Свойство Имя окна

0 голосов
/ 06 октября 2009

Есть ли способ получить имя элемента управления через win32api? (C ++)

Я говорю о свойстве, которое в C # является «Name», например «frmMain» или «btnNext». Есть ли способ получить эти данные через win32API?

Я пробовал GetWindowInfo () и прочее, но мне кажется, что я не в правильном направлении.

спасибо

edit: я итерирую с EnumChildWindows (), и я получил правильный HWND ... не уверен, смогу ли я использовать его для печати его имени ... (я абсолютный нуб c ++ / win32)

Добавлено 7/10 / 09

Кстати, я нашел этот действительно хороший инструмент для работы с приложениями win32. http://www.autoitscript.com/autoit3/

Проверьте, выглядит ли это хорошо и выглядит ли это бесплатно? :)

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

Имя элемента управления обычно является закрытой переменной элемента управления и не предоставляется win32. Вы можете попробовать GetWindowText, чтобы получить заголовок некоторых элементов управления, или GetWindowLong, чтобы получить некоторые свойства, но я не думаю, что вы можете получить имя большинства элементов управления.

1 голос
/ 06 октября 2009

Я серьезно сомневаюсь, что эта информация есть даже в исполняемом коде, я думаю, что с точки зрения компиляторов c # эти символы сводятся к указателям объектов или значениям идентификаторов окон (упомянутый выше IDC_).

Столкнувшись с проблемой такого типа, прежде чем я решил создать скрытые статические текстовые элементы управления с идентифицирующим текстом в каждом окне, чтобы обеспечить возможность этого именованного окна внешнему процессу. Не очень элегантно, но решил мою проблему в то время.

1 голос
/ 06 октября 2009

Свойство name - это что-то, AFAIK, добавленное компилятором. Win32, по сути, не поддерживает такие имена.
В C / C ++ вместо этого используется значение IDC_ * с дополнительным бонусом, заключающимся в том, что целочисленные сравнения намного быстрее, чем сравнение строк.

Edit: Btw Возможно использовать значения IDC, упомянутые выше, чтобы получить дочерние элементы управления диалога, используя GetDlgItemInt (hDlgWnd, IDC_ *), чтобы получить HWND для элемента управления. Гораздо проще, чем с помощью EnumWindows ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...