Всем привет! Появилась необходимость добавить в чужую программу, а точнее в ее текстовый редактор возможность перетаскивания текста. Вроде как все есть — выделение цветом, различные шрифты и т.п., а вот эта функциональность не реализованна, что очень странно. Если какая нибудь возможность это сделать. Например, перехват сообщений, но не имея исходников программы, даже не представляю как это можно подступиться к программе снаружи... Помогите, пожалуйста. PS: Буду рад любому коду, хоть Паскаль (Delphi), хоть С++ (лучше в стиле MS VS)
Первое, что приходит в голову — варварский способ: загрузчик программы, который внедряет библиотеку в адресное пространство программы. Библиотека будет ставить хук... В общем обычный перехват API. Над деталями стоит подумать. Если конечно ничего больше придумано не будет
Второй вариант — модификация бинарника программы — более сложная и более зверская весчь.
Третий вариант — написать письмо разработчикам
Перед тем, как улучшиться, ситуация ухудшается. (из законов Мерфи)
Здравствуйте, Macr0s, Вы писали:
M>Первое, что приходит в голову — варварский способ: загрузчик программы, который внедряет библиотеку в адресное пространство программы. Библиотека будет ставить хук... В общем обычный перехват API. Над деталями стоит подумать. Если конечно ничего больше придумано не будет M>Второй вариант — модификация бинарника программы — более сложная и более зверская весчь. M>Третий вариант — написать письмо разработчикам
3-й вариант исключается по той причине, что разработчик Microsoft , 2-й — кодить на VS или Delphi то есть на С++ и Паскаль я еще умею, а вот до ассемблера мне еще слабо. Так что остается первый вариант, вот о деталях было бы интересно...
Здравствуйте, eldar9x_, Вы писали:
_>3-й вариант исключается по той причине, что разработчик Microsoft
Интересно, что за программа такая _>2-й — кодить на VS или Delphi то есть на С++ и Паскаль я еще умею, а вот до ассемблера мне еще слабо. Так что остается первый вариант, вот о деталях было бы интересно...
Ну если подумать — я думаю, дело обойдется хуком мышиным (WH_MOUSE).
Алгоритм работы загрузчика примерно такой:
1) запуск программы
2) установка хука
3) всё, можно работать в программе.
В функции хука как раз и реализуется Drag-n-Drop.
Как конкретно — не в курсе, Drag-n-Drop никогда не программировал. Но как-то так:
if(мыша над нашим редактором)
{
if(имеем выделенный текст, который ещё не перетаскивается)
{
StartDrag(наш текст);
} else if(наш текст перетаскивается)
{
// перетаскиваем дальше
} else if(конец перетаскивания)
{
EndDrag(наш текст);
// помещаем наш текст куда надо
}
}
Конечно с обработкой нажатых клавиш мыши и всё такое...
Подробнее про хуки можно почитать здесь
Здравствуйте, Macr0s, Вы писали:
M>Кстати, и dll никакой не надо будет, т.к. dll должны использоваться только при постановке глобальных хуков, а в этом случае будет локальный хук.
Огромное спасибо, Macr0s. Наконец-то понял примерное направление куда копать. А по-поводу программы — это корпоративная система управления Axapta, там есть свой язык программирования (X++), так вот разработчики не удосужились сделать нормальный редактор кода, конечно, я не требую редактор типа VS 2005, но хотя бы элементарную возможность перетаскивания текста можно же было докодить...