1: все ли компоненты отображающие текст являются окнами? 2: как провести поиск в главном меню программы (то есть получить указатель на голову, и искать по дочерним пунктам, кстати неплохо было бы что-нить аналогичное EnumChildWindows только с пунктами меню)? 3: как выделить окно (то показать родителя и допустим показать ту вкладку где лежит заголовок окна, чей хендл известен)? Нужно ли запоминать для этого всех его родителей или достаточно отправить ему какое-нить сообщение? 4: аналогично симулировать попадание в известный подкаталог меню?
Нет GetMenu(), GetSubMenu() Толком вопрос не ясен. Возможно имеется ввиду ShowWindow(hWnd, SW_RESTORE) или просто SetForegroundWindow(). Для получения родителя - GetParent()/GetAncestor(). Тебе развернуть меню или произвести клик?
допустим найден какой-нить текстовый заголовок, нужно показать окно им владеющее (ведь оно может быть скрыто) и выделить текст заголовка. С меню аналогично (раскрыть все родительские ветки наглядно показав путь до заданного пункта и выделить его (в принципе можно еще и мышь перетащить туда, тогда задача выделения снимается), эмулировть клик не нужно
Заголовок есть только у главного окна. Окно им владеющее - десктоп. Подразумеваю, что вопрос поставлен некорректно. Возможно имелось ввиду: "Найти hWnd окна по заданному тексту и отобразить его _главного_ родителя". Если так, то задача тривиальна, хоть и не всегда решаема (в том случае, когда текст "нарисован" на окне, найти его не выйдет). По поводу показа заданного меню. Честно говоря, я не знаю легальных и элегантных способов это сделать. Единственное, что приходит на ум - вычислить позицию меню относительно самого первого элемента (того, который обычно в левом верхнем углу окна). Позицию не в координатах (естественно ), а в количестве и направлении шагов, требуемых для отображения данного пункта меню с помощью стрелок на клавиатуре. Дальше эмулируем нажатие Alt (активируем самый первый пункт меню) и нажатия соответствующих стрелок. Т.е., к примеру, чтобы добраться до пункта "О программе" стандартного блокнота, нам нужно поочередно имитировать нажатия следующих клавиш: Alt, 4 раза вправо, 2 раза вниз. Естественно, при таком поиске нам необходимо учитывать недоступные пункты и сепараторы, они считаться не должны.
Конкретизирую и сужаю третий вопрос. ну есть у нас какой-нить статичный текст в окне (допустим - что-нить типа дельфовского лейбла). Мы же можем мышкой выделить текст, так какое сообщение надо отсылать окну, чтобы выделить находящийся в нем текст?
Ну вот ни как ты в дельфовом лейбле текст не выделишь. Мало того - дельфовый лейбл (TLabel) не окно, тебе не узнать, что там написано. Что ты будешь искать? Если все же речь идет о текстовых полях (на что я искренне надеюсь ), то EM_SETSEL поможет.