Получение дескриптора дочернего окна C \ C ++ - PullRequest
2 голосов
/ 24 марта 2011

Я попытался выполнить поиск здесь и в Google, в результате я использовал метод "GetDlgItem", но он не работает.

Вот мой код:

HWND hwnd_Parent;
HWND hwnd_Child;

hwnd_Parent = FindWindow(NULL,"MyTitle");
hwnd_Child = GetDlgItem(hwnd, 0x00030756);

С hwnd_Parent все в порядке (я даже сделал несколько тестов после публикации сообщения), но hwnd_Child имеет значение null.Итак, шестнадцатеричное число, которое вы видите, было найдено с помощью WinSpy ++.

Моя система - 64-разрядная Windows 7, моя IDE - кодовые блоки.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 24 марта 2011

Вам необходимо знать идентификатор окна, чтобы использовать GetDlgItem(). Я подозреваю, что вы передаете HWND, полученный от Spy ++.

Похоже, что вы ковыряетесь в другом приложении, потому что если бы это было ваше собственное приложение, вам не нужно было бы вызывать FindWindow, и вы знали бы идентификатор элемента управления.

Вероятно, самый простой способ найти это окно, когда вы получили окно верхнего уровня из FindWindow, это вызвать EnumChildWindows().

2 голосов
/ 24 марта 2011

GetDlgItem принимает идентификатор элемента управления. 0x00030756 уже выглядит как ручка, так что именно вы пытаетесь получить?

hwnd_Child = (HWND)0x00030756;

(Конечно, это всего лишь пример. В любом случае, это не помогает жестко кодировать значения для обработки.)

0 голосов
/ 28 августа 2014

Сначала вызовите GetDlgCtrlID с HWND, чтобы получить контрольный идентификатор

int GetDlgCtrlID(HWND controlHandle);

затем используйте функцию CWnd GetDlgItem

CWnd* GetDlgItem(int controlID);
...