Помощь - Поиск - Пользователи - Календарь
Полная версия: обмануть чужое приложение
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
мисс_граффити
Идея такая: есть программка, которая либо запускает Word [как именно - неизвестно], либо говорит, что его нет.
Хотелось бы подружить ее с OpenOffice...
Как это можно сделать?
Или, если формулировать конкретнее:
можно ли отловить _попытку_ запуска приложения (как отслеживать удачный запуск я знаю, но в данной ситуации он обязательно будет неудачным) и заменить запускаемое приложение? чтобы запускающая программка была уверена, что у нее все отлично получилось...
вариант отловить нажатие на кнопку и запустить то, что мне нужно, не полностью решает проблему - надо как-то той программке подсунуть информацию об успешности....

Заранее спасибо за идеи в любом виде...
hardcase
Зависит от того, как запускается ворд. 1) Если выполняется ShellExecute или CreateProcess с командной строкой вида
Код

winword param1 param2 ... paramN


то можно положить рядом с целевым приложнием программку-заглушку с именем winword.exe, которая будет запускать OpenOffice.


2) Приложение может неким другим образом производить детект оффиса - через реестр. Тут уже нужно изучать поведение софта.
мисс_граффити
Судя по всему, не 1.... то есть переименование writer -> winword ничего не дает. пишет: "ошибка при запуске msword или msword не найден"
Malice
Цитата(мисс_граффити @ 26.02.2007 18:34) *

Судя по всему, не 1.... то есть переименование writer -> winword ничего не дает. пишет: "ошибка при запуске msword или msword не найден"

А программа то большая ? Можно посмотреть как запускается word и подправить что нибудь..
мисс_граффити
большая...
посмотреть - более чем проблематично (исходников нет и получить без шансов), подправить - совсем нереально (не только технический, но и юридический момент).
Malice
Цитата(мисс_граффити @ 27.02.2007 1:26) *

большая...
посмотреть - более чем проблематично (исходников нет и получить без шансов), подправить - совсем нереально (не только технический, но и юридический момент).

Юля, конечно же я не имел ввиду просмотр и правку исходников smile.gif Глянуть можно SoftIce-ом, идой или оллей. Если нельзя патчить, то можно написать лоадер, который будет делать патч этой проги в памяти после ее загрузки..
ps на сколько большая? Может она у меня уже есть (типа гарант) smile.gif
мисс_граффити
почти...
Кодекс.
Malice
Поищу на работе, может есть на каком компе.. Пока попробовал вот что:
При выполниние простого кода:
msword := CreateOleObject('word.application');
msword.visible := true;

видно, что для запуска ворда опрашивается ключ в реестре
HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\CB4EDBE115A903645B145216AF54CC5C\9140110900063D11C8EF10054038389C
значение "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"
Если поменять значение на cmd.exe например, то он начинает запускатся smile.gif Правда потом крякает с ошибкой оле.. sad.gif
Т.е. я понимаю так: наверняка твой OpenOffice тоже зарегистрирован как оле, можно проверить как его запустить правильно. Дальше либо:
1. поправить в кодексе 'word.application' на то, что надо;
2. править реестр в этом ключе перед кодексом и назад после;
3. еще чего нибудь придумать smile.gif

мисс_граффити
good.gif
спасибо, попробую.
klem4
Прогуливаясь по DRKB наткнулся на статью
Цитата
Как перехватывать события, посланные другим приложениям?


Хотя если метод вызова не известен ... ну так или иначе решил сообщить smile.gif
мисс_граффити
это новый DRKB?
volvo
В старом тоже было: "Системные функции и WinAPI -> Windows -> Работа с чужими процессами -> Как перехватывать события, посланные другим приложениям?"

Юля, есть еще одна идея: я бы пошел совсем глубоко, и попробовал бы перехватить создание процесса через zwCreateProcess... Хотя это будет намного сложнее...
мисс_граффити
Malice, в результате изменения еще двух ключей (HKEY_CLASSES_ROOT\Word.Application\CurVer и HKEY_CLASSES_ROOT\Word.Application\CLSID) исполнение кода
msword := CreateOleObject('word.application');
msword.visible:=true;

приводит к запуску PowerPoint'а (а также Excel или Access).
А вот все остальное, с чем экспериментировала, говорит, что не знает метод Visible... но, видимо, раз до этого доходит - эффект все же есть.
Завтра попробую с OpenOffice и не своей программкой, а той, о которой изначально шла речь - возможно, получится.

volvo, поищу инфу по zwCreateProcess'у....

спасибо всем!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.