Получение дескриптора дочернего окна в C ++ - PullRequest
0 голосов
/ 02 апреля 2012

Я хочу получить дескриптор дочернего окна, но не могу. Я хочу автоматически вставить текст в элемент управления «Редактировать». Вот что у меня есть:

//global var

int id=0;

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
  id = GetDlgCtrlID(hwnd);
  HWND hwnd_Child;
  hwnd_Child = GetDlgItem(hwnd, id);
   SendMessage(hwnd_Child, WM_SETTEXT, NULL, (LPARAM)"mYtexttttt");
  /* other code */
  // id is always 0, why ?
  // return FALSE; // stop enumerating
  return TRUE; // continue enumeration
}

void MyFunction ()
{
    HWND hwnd_Parent;

    hwnd_Parent = FindWindow(NULL,"MyTitle"); if(! hwnd)return;

    EnumChildWindows(hWnd ,(WNDENUMPROC)EnumWindowsProc, NULL);
}

В WinSpy ++ идентификаторы элементов управления всех компонентов - 000000000. Возможно ли, что идентификатор элемента управления не определен?

Как найти дочерний дескриптор какого-то определенного компонента (поле редактирования), если у меня есть дескриптор главного окна, а идентификатор элемента управления не определен?

Кроме того, главным окном является игровое приложение, которое работает с DirectX, я думаю. Я хочу автоматически вставить текст в элемент управления «Правка».

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

В вашем методе обратного вызова, пожалуйста, сделайте следующее:

// get the window text
GetWindowText(hWnd, (LPTSTR)windowText, MAX_PATH);

// get the window info
WINDOWINFO objWinInfo;
GetWindowInfo(hWnd, &objWinInfo) 

Вышесказанное должно помочь вам получить дочерние окна.

Также вы можете сделать FindWindowEx, чтобы получить ребенкаокна.

2 голосов
/ 02 апреля 2012

Если WinSpy сообщает вам, что идентификаторы элемента управления равны 0, тогда получение 0 обратно от GetDlgCtrlID (), конечно, является ожидаемым результатом.Вам нужно будет сделать что-то еще, например, отсчитать количество вызовов EnumWindowsProc () и / или вызвать GetClassName (), чтобы вы могли видеть, что это элемент управления для редактирования.Или GetWindowRect () для перехода по позиции.

1 голос
/ 02 апреля 2012

Идентификаторы управления являются одним из удобных способов идентификации дочерних окон;но не единственный способ.Поэтому вполне возможно, что для идентификатора элемента управления будут установлены произвольные (или нулевые) значения (в этом случае родительское окно просто ссылается на них непосредственно их дескрипторами.

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

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