V>Относительно статьи. Я, конечно, может и ошибаюсь, но она меня не совсем устраивает. Я писал конечно длл компоненты для 1с на си шарпе, но на другой фирме. А здесь это сделать нелегко. У нас около 30 филиалов разбросаных по Украине. и устанавливать на кждом по .NET Framework не сахар . Кроме того, есть калькуляторы, у которых установлено Вынь 98. А всего этих компьютеров насчитывается около 150 штук!
Нда, что делает с человеком занятие 1с. При чем тут Net? Там был показан способ создания Com сервера для 1c. С тем же успехом это можно сделать и на ATL.
V>Неужто придется выбирать вариант "удалять гланды через анус"?
V>Вот еще одна статья: http://www.codeguru.com/Cpp/W-P/system/keyboard/article.php/c5699/ . Вот только мне не виртся, что получив HANDLE окна я не могу достучаться до WM_CHAR этого окна и получить код символа. В вышописанной статье путь конечно супер гиморный. Может посоветуете билиотеки какие?
Все, что надо делать, я уже написал. Внимательно прочитайте написаное, ипользуйте поиск по форуму. Тема сабклассинга окна в чужом приложении тут обсуждалась, и даже были примеры кода. Но еще раз — на мой взгляд, хуки вам не нужны. Все, что нужно — написать inproc com сервер, который будет загружаться при открытии нужной вам формы. Вы же ведь можете при ее открытии выполнять скрипт?
Здравствуйте, Andrew S, Вы писали:
V>>Ну создам я очередную компоненту, что тогда делать то? Как перехватить?
AS>Применить сабклассирование. Находите нужное окно, сабклассируете его, и в своей WNDPROC обрабатываете нужные сообщения.
ОК, Andrew S. Спасибо. Вы супер. сейчас попробую. Эхх...
Здравствуйте, Andrew S, Вы писали:
V>>Относительно статьи. Я, конечно, может и ошибаюсь, но она меня не совсем устраивает. Я писал конечно длл компоненты для 1с на си шарпе, но на другой фирме. А здесь это сделать нелегко. У нас около 30 филиалов разбросаных по Украине. и устанавливать на кждом по .NET Framework не сахар . Кроме того, есть калькуляторы, у которых установлено Вынь 98. А всего этих компьютеров насчитывается около 150 штук!
AS>Нда, что делает с человеком занятие 1с. При чем тут Net? Там был показан способ создания Com сервера для 1c. С тем же успехом это можно сделать и на ATL.
AS>>Нда, что делает с человеком занятие 1с. При чем тут Net? Там был показан способ создания Com сервера для 1c. С тем же успехом это можно сделать и на ATL.
Ovl>а com на 98-ой есть? или патчитить калькуляторы?
Странный вопрос. Com есть на 95-х. 1с же активно использует ActiveX\Com объекты, насколько я помню по своему давнему опыту общения с этим сабпродуктом.
здесь удобно, что все функции, выставляющие хук находятся внутри самой dll, и таким образом получают премущество в виде shared memory section. образно говоря, внутри dll можно сделать память, которая будет общей для этой dll, даже если она была загружена в другой процесс.
ну вот, с приложение мы разобрались, осталось написать код внутри dll, сначала ставим хук, потом процедура, которая называется сабклассированием.
момент — CallNextHookEx() получает хендл хука, который был установлен. а если я устанавливаю его в одном процессе, например, в своем, а он потом вызывается другой, например из калькулятора:
1) в адресное пространство калькулятора загружается hookDll.dll
2) там ищется функция CBTProc
3) вызывается оная.
и внутри неё нам нужно вызвать следующий хук ( они там в очереди все стоят ). но SetWindowsHookEx я вызывал в другом процессе, значит и хендл хука в другом процессе. вот тут-то и пригодятся shared memory section. они позволяют сказать линкеру, что вот эта область память будет доступна для всех длл, неважно где и когда они загрузились.
конкретно, в эту область нам надо поместить HHOOK hook. в результате получается
Здравствуйте, Andrew S, Вы писали:
AS>>>Нда, что делает с человеком занятие 1с. При чем тут Net? Там был показан способ создания Com сервера для 1c. С тем же успехом это можно сделать и на ATL.
Ovl>>а com на 98-ой есть? или патчитить калькуляторы?
AS>Странный вопрос. Com есть на 95-х. 1с же активно использует ActiveX\Com объекты, насколько я помню по своему давнему опыту общения с этим сабпродуктом.
вопрос не странный. просто я не знаю когда именно появился ком, не думал, что это было до появления 98.
однако в msdn:
HRESULT CoInitialize(
LPVOID pvReserved
);
Windows NT/2000/XP: Requires Windows NT 3.1 or later.
Windows 95/98: Requires Windows 95 or later.
Header: Declared in objbase.h.
Library: Use ole32.lib.
а вот насчет activeX — интуиция мне подсказывает, что наличие activeX коррелирует с наличием IE4.0
Здравствуйте, Andrew S, Вы писали:
Ovl>>посмотрел я посты — действительно, хук + сабклассинг более верно.
AS>Я думаю, не нужен там хук. 1c позволяет писать под себя плагины.
тем проще. однако я из кода не видно, что написание хука труднее.
в любом случае — это один из альтернативных вариантов. не пригодится ему — пригодится другому..
Здравствуйте, Andrew S, Вы писали:
Ovl>>а вот насчет activeX — интуиция мне подсказывает, что наличие activeX коррелирует с наличием IE4.0
AS>Интуиция вас обманывает. Для начала неплохо разобраться, что такое ActiveX
да, неплохо бы...
хотя мне бы программировать научится — и то удачно