Отправлено 23 августа 2004 - 15:49
Уж не знаю, правильно ли я понимаю вопрос, однако, постараюсь выдвинуть свою версию происходящего.
У тебя ситуация такая, что при каждой следующей сборке продукта, програмеры меняют заголовки окон. Вследствие чего, ты не можешь опираться на них в своих скриптах. Ты ищешь возможность создания универсального скрипта, который бы работал основываясь не на заголовках окон.
Если всё верно, то могу сказать так, в документации TC любое окно определяется иерархией следующего плана:
ИМЯ ПРОЦЕССА->КЛАСС ОКНА,ЗАГОЛОВОК,ИНДЕКС->ДОЧЕРНЕЕ ОКНО (КЛАСС ОКНА,ЗАГОЛОВОК,ИНДЕКС)->и т.д.
КЛАСС ОКНА - это тип окна, экземпляр которого програмер создаёт в коде
ЗАГОЛОВОК - это заголовок окна, который передаётся в функцию регистрации окна соответствующим параметром
ИНДЕКС - это номер, который последовательно, в зависимости от порядка создания, присваивается окнам с одинаковыми КЛАССОМ и ЗАГОЛОВКОМ в одном контексте, операционной системой!!!.
На самом деле для операционной системы (речь о Windows), существует плоская модель идентификации окон - по так называемым хэндлам. TC обнаружив создание приложением окна с одинаковым контекстом, классом (типом) и заголовком, но другим хэндлом, регистрирует для него новый индекс, который равен "предыдущий индекс" + 1.
Исходя из выше сказанного, можно сделать вполне логичный вывод, что при строгой последовательности создания окон в приложении (например, окна создаются последовательно в коде программы, которая не является многопоточной), при идентификации окна в TC можно опираться только на КЛАСС ОКНА и ИНДЕКС.
В связи с этим, если при запуске тестового скрипта окно по выше описанной схеме "КЛАСС ОКНА и ИНДЕКС" не обнаруживается, значит программисты сменили порядок их создания, либо добавили одно или несколько.
Если речь идёт о смене этого индекса в одной тестовой сессии, т.е. скрип "щёлкнул" правой кнопкой мыши и появилось контекстное меню, которое является окном с индексом №М, а при повторных "щелчках" появляется окно с индексом М+N и так далее для последующих "щелчков" (M+N+N+...N), то это говорит о том, что ресурс занимаемый окном в программе не освобождается, а енто и есть баг програмеров (утечка памяти).
А в общем, правильно было бы создать структуру, держащую в себе заголовки всех окон, применяемых приложением, и передавать её поля в качестве параметров процедурам TC Window и т.п. Тогда появляется возможность менять их названия централизовано.
Вот в общем-то и вся математика :-).
Удачи.