Форум «Всё о Паскале» _ Делфи _ обмануть чужое приложение
Автор: мисс_граффити 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)
большая... посмотреть - более чем проблематично (исходников нет и получить без шансов), подправить - совсем нереально (не только технический, но и юридический момент).
Юля, конечно же я не имел ввиду просмотр и правку исходников Глянуть можно SoftIce-ом, идой или оллей. Если нельзя патчить, то можно написать лоадер, который будет делать патч этой проги в памяти после ее загрузки.. ps на сколько большая? Может она у меня уже есть (типа гарант)
Автор: мисс_граффити 28.02.2007 2:20
почти... Кодекс.
Автор: Malice 28.02.2007 3:56
Поищу на работе, может есть на каком компе.. Пока попробовал вот что: При выполниние простого кода:
видно, что для запуска ворда опрашивается ключ в реестре HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\CB4EDBE115A903645B145216AF54CC5C\9140110900063D11C8EF10054038389C значение "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE" Если поменять значение на cmd.exe например, то он начинает запускатся Правда потом крякает с ошибкой оле.. Т.е. я понимаю так: наверняка твой OpenOffice тоже зарегистрирован как оле, можно проверить как его запустить правильно. Дальше либо: 1. поправить в кодексе 'word.application' на то, что надо; 2. править реестр в этом ключе перед кодексом и назад после; 3. еще чего нибудь придумать
Автор: мисс_граффити 28.02.2007 4:21
спасибо, попробую.
Автор: klem4 2.03.2007 0:46
Прогуливаясь по DRKB наткнулся на статью
Цитата
Как перехватывать события, посланные другим приложениям?
Хотя если метод вызова не известен ... ну так или иначе решил сообщить
Автор: мисс_граффити 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) исполнение кода
приводит к запуску PowerPoint'а (а также Excel или Access). А вот все остальное, с чем экспериментировала, говорит, что не знает метод Visible... но, видимо, раз до этого доходит - эффект все же есть. Завтра попробую с OpenOffice и не своей программкой, а той, о которой изначально шла речь - возможно, получится.