О внешних компонентах: перехват событий 1С #509267


#0 by Злобный Йожег
Вопрос в большей степени теоретический. Собственно, навеян он, в частности, работой с компонентой FormEx. К примеру, предопределенная процедура ПослеОткрытия, срабатывающая после создания формы на экране, или внедрение закладки с описанием сведений о ВК в окно 1С "О программе". Хотелось бы выяснить, каким образом подобное достигается? При разработке ВК имеет ли значение язык программирования, на котором эта ВК будет написана, для таких возможностей? Заранее признателен за все ответы по существу.
#1 by Злопчинский
Напиши для 8-ки перехват открытых печатных форм, как это сделано на 7.ке в формексе
#2 by SnarkHunter
Тебе лучше сюда
#3 by SnarkHunter
Кстати, исходники открыты...
#4 by Злобный Йожег
А тут слабо на такое ответить? :) Я на том форуме никак зарегиться не могу, все время на х.. посылают с рамблеровским мылом. Кстати, а исходники-то на чем написаны?
#5 by ДенисЧ
на плюсах Но тут не разм^W язык важен, а руки
#6 by Злобный Йожег
из делфей, к примеру, можно какое-нибудь событие 1С перехватить? И как это могло бы смотреться? (понимаю, что очень пространный вопрос сейчас задаю, но... может, кто-то кинет примерчик кода? :)
#7 by SnarkHunter
Конечно слабО... Ты даже не представляешь насколько...
#8 by ДенисЧ
Да хоть из асма...
#9 by Злобный Йожег
А пример-то, пример мона? :)
#10 by ДенисЧ
изучи Потом переведи на доступный тебе язык
#11 by Злобный Йожег
, благодарю! Ты самый лучший питерец! :) Буду копать...
#12 by H A D G E H O G s
Если будешь читать муть в - я те сочувствую.
#13 by H A D G E H O G s
romix написал все, нет. ВСЕ. Уже давно и надежно.
#14 by Злобный Йожег
Это ты про его шаблон ВК на делфи? Там разве описываются перехваты событий 1С?
#15 by H A D G E H O G s
Там hook на клавиатуру прям с шаблоном.
#16 by Злобный Йожег
Осталось только понять, причем тут работа со сканером...
#17 by H A D G E H O G s
Вообще первоначально смотрите в HOOK-и, если надо что нестандартное - подменяйте оконные процедуры, но это - ненадежно (особенно с v 8.1.13 :-)
#18 by H A D G E H O G s
SetWindowsHookEx в этих самых интернетах.
#19 by Злобный Йожег
Ладно, завтра почитаю... А то седня уже поздно.
#20 by Torquader
В любой программе можно сделать перехват событий, если есть возможность внесения изменений в код программы. Для этого надо просто найти точку вызова функции, которая вызывается в программе при появлении какого-то события (например, все события, кроме некоторых, попадают в оконную процедуру), далее надо найти место в коде, где эта функция начинает работать, скопировать выполняемый ей кусок кода в другое место, а в начало самой функции вставить переход на это место (то есть мы копируем только ту часть, которая занята переходом) - трудности могут быть только в том случае, если несколько байт перехода занимают несколько команд, а внутри функции идёт переход на одну из этих команд (но такое встречается только в случае работы на ассемблере). Теперь, если в начало нашей новой области мы добавим произвольный код, то он будет выполняться перед вызовом процедуры обработки события. Вариант 2. Отладка. То есть мы на нашу функцию ставим точку останова и вызываем отладку процесса. При попадании в функцию мы получаем сообщение в отладчик - мы должны заменить команду отладки на нормальную, выполнить один шаг и вернуть точку отладки на место. Отлаживать можно любые места в процессах (например, в 1С можно какие-то ожидания дополнять командами Sleep, чтобы ничего не тормозило). Вариант 3. Подмена адреса функции в DLL и таблице переходов DLL. Все функции, которые вызываются из DLL имеют связку с именем экспортируемой функции - если что-то поменять в DLL, то можно указать другой адрес экспортируемой функции (или оставить тот же адрес, но передвинуть оригинал). Ну и множество других вариантов - Windows очень "дырявая" на всякие внедрения система.
#21 by H A D G E H O G s
Ах если б, ах если б. Все было так просто.
#22 by H A D G E H O G s
Стукнись в любую dll-ку от 8.1 Что увидишь в экспорте? Правильно SCOM_Main И все. И что там сплайсить?
#23 by trdm
хорошо вам умным. а у меня вот мозги под перехват не заточены..
#24 by H A D G E H O G s
Ты бы лучше вместо умственного мусора вернулся бы в тематику, глядишь, сами бы заточились.
#25 by Torquader
Таки даже перехват вызова функции (если он будет удачным - что само по себе не всегда выходит - причём гарантию того, что не вызовется часть процедуры с переходом - никто не даст) - нам же ещё нужно получить данные, которые привязаны к этому вызову - а вот тут уже начинается самое интересное. (У меня для некоторых программ была задача - не выйти за размеры кода Dll - приходилось искать повторения кода функций и "склеивать три в два") И в свете последних слов "запрещается доступ к данным 1С минуя стандартные средства доступа 1С" всякое копание "внутри монстра" ничего, кроме удовлетворения собственного любопытства, не принесёт.
#26 by trdm
ну ты от меня недалеко ушел. я тебя не понял.
#27 by H A D G E H O G s
Под мусором - я имею ввиду флуд про политику.
#28 by trdm
таки ты прав, но в чем ты прав я не скажу..
#29 by Кириллка
ну ты нашел проблему в одном из предложенных выше вариантов, но это не значит, что другие варианты не проканают. Ну и конечно, патчинг таблиц импорта/экспорта не всегда подходит. Вот вариант 1 вполне хороший :) Тем более, что с WinXP во всех системных библиотеках в начале функций заботливо оставлены 5 байт для таких переходов, для ленивых случаев.
#30 by Злобный Йожег
"запрещается доступ к данным 1С минуя стандартные средства доступа 1С" Хм... и давно запретили? Кто? БГ? Извините, но 1С (особенно 7.7) своей системой хранения данных просто кричит: "Влезь в меня откуда угодно!" Это не говоря уже о том, что вопрос о "стандартных" средствах доступа тоже весьма размытый...
#31 by ДенисЧ
В 8ку запретили.
#32 by Злобный Йожег
Ну вроде один товарисЧ рассказывал, что в книге Радченко описывается технология прямого доступа к данным 1С 8 через АДО. Тоже ведь для 1С не совсем стандартно...
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С