Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ обмануть чужое приложение

Автор: мисс_граффити 17.02.2007 23:06

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

Заранее спасибо за идеи в любом виде...

Автор: hardcase 22.02.2007 22:41

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

Код

winword param1 param2 ... paramN


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


2) Приложение может неким другим образом производить детект оффиса - через реестр. Тут уже нужно изучать поведение софта.

Автор: мисс_граффити 26.02.2007 22:34

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

Автор: Malice 27.02.2007 3:36

Цитата(мисс_граффити @ 26.02.2007 18:34) *

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

А программа то большая ? Можно посмотреть как запускается word и подправить что нибудь..

Автор: мисс_граффити 27.02.2007 5:26

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

Автор: Malice 28.02.2007 1:10

Цитата(мисс_граффити @ 27.02.2007 1:26) *

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

Юля, конечно же я не имел ввиду просмотр и правку исходников smile.gif Глянуть можно SoftIce-ом, идой или оллей. Если нельзя патчить, то можно написать лоадер, который будет делать патч этой проги в памяти после ее загрузки..
ps на сколько большая? Может она у меня уже есть (типа гарант) smile.gif

Автор: мисс_граффити 28.02.2007 2:20

почти...
Кодекс.

Автор: Malice 28.02.2007 3:56

Поищу на работе, может есть на каком компе.. Пока попробовал вот что:
При выполниние простого кода:

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


Автор: мисс_граффити 28.02.2007 4:21

good.gif
спасибо, попробую.

Автор: klem4 2.03.2007 0:46

Прогуливаясь по DRKB наткнулся на статью

Цитата
Как перехватывать события, посланные другим приложениям?


Хотя если метод вызова не известен ... ну так или иначе решил сообщить smile.gif

Автор: мисс_граффити 2.03.2007 1:00

это новый DRKB?

Автор: volvo 2.03.2007 1:50

В старом тоже было: "Системные функции и WinAPI -> Windows -> Работа с чужими процессами -> Как перехватывать события, посланные другим приложениям?"

Юля, есть еще одна идея: я бы пошел совсем глубоко, и попробовал бы перехватить создание процесса через zwCreateProcess... Хотя это будет намного сложнее...

Автор: мисс_граффити 2.03.2007 3:45

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'у....

спасибо всем!