Строго говоря, нужен не реверсинг, а небольшое исследование с написанием утилиты. Суть в следующем: хочется программно получить текст окна текстового редактора (редактора кода) Конфигуратора 1С:Предприятия v8. Цель: написание утилит, облегчающих работу программиста-настройщика в этой среде. Хорошим решением была бы DLL, которая экспортировала бы необходимые функции. Первое, что нужно - это получение текста текстового редактора по HWND окна этого текстового редактора. Задача, как мне кажется, не самая простая, т.к. утилиты типа Winspector Spy, вроде бы, ничего не ловят (впрочем, я не спец, потому и обращаюсь). Просто есть идея сделать некоторую автоматизацию работы в Конфигураторе 1С с помощью скриптового языка Autohotkey. Этот язык очень здорово работает с горячими клавишами, текстом, эмуляцией пользовательского ввода и т.п. Помимо прочего он позволяет очень легко получить, например, HWND активного окна. Но дальше затык. Методы получения контролов окна и их содержимого там есть, но в случае с 1С v8 они не срабатывают. Вообще, 1С v8 довольно "гадко" написана в этом плане: там свои библиотеки и всё это вместе - "чёрный ящик", не поддающийся реверсингу. Например, даже экспорта в DLL там толком нет. Но это лирика. А пока что есть задача получить текст окна текстового редактора.
нужно? стоит зада4а? еще и на конкретном скриптовом языке? тогда вам на фриланс.ру. тут предоставляют только помощь и советы, а не выполняют фор_фри зада4и за кого-то, просьбы о помощи я тут по4ему-то совершенно неувидил, ровно как и просьбы разъяснить какие-то техни4еские моменты
Ну почему же, подойдёт любая инфа и любой совет. Могу сформулировать вопрос так: а куда копать, собственно? Как получить текст окна, зная только HWND? Причём это HWND не контрола, в котором происходит редактирование, а всего окна (не главного окна приложения, конечно, но его дочернего окна в MDI интерфейсе). И этот контрол не распознаётся утилитами типа Winspector Spy. Поясню, что значит "не распознаётся". При наведении мышки на разные окна такие утилиты обычно показывают рамку вокруг распознанного окна. Так вот, в данном случае окно текстового редактора воспринимается как единое целое. Я просто не знаю, в каком направлении даже начать. Топик этот составлен в надежде, что это интересно ещё кому-нибудь. В конце концов, ведь 1С - популярная программа.
Нет, ни в коем случае. Этот конкретный скриптовый язык я привёл только потому, что он хорошо работает с экспортируемымми функциями DLL (например, с Win32 API). А это значит, что если, например, проблема решается путём вызова каких-то API - то дело уже в шляпе. Но вопрос пока сводится к следующему: а какими методами, утилитами и т.д. это вообще надо исследовать?
Приведите очередность действий от и до. В духе - Открыли конфигуратор-Новая конфигурация-Создать то-то или то-то- Появилось окно- Надо управлять этим окном-Установить текст ему и т.п. Опишите задачу полностью, я полагаю времени у вас на это найдется. Чем черт не шутит, вдруг это достаточно просто окажется и мне удастся вам помочь. upd. не знаю как там работает программа, управляющая окнами, но mdi окна находятся на ура. пример: далее следуют имена классов окон V8TopLevelFramе->V8MDIClient->открыты окна с кодом двух модулей-V8MDILocalFrame(2 штуки соответственно)->V8ViewSplitter->V8Window->V8Window
находим хендл главного окна, пере4исляем все до4ерние, находим координаты либо положение, либо текст и выводим для всех (4тобы найти нужное окно, раз уж выходит 4то его никак "найти" нельзя), когда нашли. запоминаем и тот параметр, по которому нашли и будет нужным параметром поиска. далее аогритм всегда будет таков: ищем хендл мейна, пере4исляем все до4ерние, сравниваем например размеры окна с заданными эталаонными, если совпало - наше окно, в таком слу4ае посылаем ему SetWindowText(hWnd, Text). все
1. Открыли конфигуратор, меню "Конфигурация" - "Открыть конфигурацию". 2. Команда контекстного меню корневого объекта метаданных в дереве - "Открыть модуль приложения". Собственно, и всё. Открывшееся окно имеет ClassNN "V8MDILocalFrame1", если держать курсор мыши над его заголовком. Если держать курсор мыши над текстом самого редактора, ClassNN - "V8Window3". Я не уверен, что цифры в конце ClassNN постоянны. Например, если создать текстовый документ, то второй ClassNN будет уже "V8Window4". (Для определения ClassNN я использовал инструмент AU3_Spy.exe.) Далее. Пишем скрипт на AutoHotkey: Code: #IfWinActive ahk_class V8TopLevelFrame F12:: OutputVar = ; Буква "А" везде означает активное окно. ;Определяет, на каком контроле (элементе управления) указанного окна находится фокус ввода. ControlGetFocus, OutputVar, A MsgBox %OutputVar% ; выдаёт "V8Window3" ; Считывает информацию о контроле, в данном случае - Hwnd ControlGet, OutputVar, Hwnd,, V8Window3, A MsgBox %OutputVar% ; выдаёт что-то типа "0x2103cc", похоже на правду ; Считывает текст из контрола ControlGetText, OutputVar, V8Window3, A MsgBox %OutputVar% ; выдаёт пустую строку, типа текста нет (это неправда) ; Читает текст указанного окна WinGetText, OutputVar, A MsgBox, %OutputVar% ; выдаёт заголовок окна типа "Конфигурация: Модуль приложения" Вобщем, достать текст не выходит. Просмотрите код - он очень простой и прокомментирован. Собственно, я не прошу написать рабочий скрипт на AutoHotkey. Я лишь прошу ответить на вопрос: получится ли выдрать текст из этого "V8Window3", например, на Си, используя Win API? Если да, то какие API и как нужно задействовать? Может, есть ещё какие-то способы получить этот текст программно? Примечание: программа Kleptomania этот текст читает, но там совсем другая технология. Вобщем, если не лень, я прошу вас попробовать практически написать что-то на Си или ещё на чём-то. Советы ProTeuS понятны, но чтобы ими воспользоваться, у меня просто не хватит квалификации. Кроме того, не факт, что эти советы сработают, т.к., как я уже говорил 1С v8 - это чёрный ящик ещё тот. Здесь нужна рука опытного хакера, потому я так "по-наглому" и прошу, поймите пожалуйста правильно . На данном этапе меня интересует сама возможность подобного действия. Если эта возможность оправдается (в чём я не совсем уверен), тогда уже можно будет подумать, как это прикрутить к моим потребностям и всё такое...
копать в сторону wbase81.dll имена функций экспорта имеют весьма и весьма интересные названия. Если сложности с разбором, есть переходники в frame.dll, txtedui.dll и прочие com компоненты. p.s. бесплатно только сами знаете что)