Войти

Показать полную графическую версию : Как в Delphi узнать, запущен ли Word или Excel


Kroc
14-10-2004, 00:57
FindWindow()не катит, т.к. нужно знать точное название заголовка. Если
перебирать все окна, и сравнивать по части строки заголовка - как-то некрасиво.
Кто знает метод поинтересней?

vasketsov
14-10-2004, 13:32
Kroc
Поискать по имени файла процесса?
Поискать по имени КЛАССА окна?
Поискать в Running Object Table (не уверен, впрочем, что они там регистрируются)?

Вопрос на засыпку: если я в своей программе создаю объект Word.Application и он создается в МОЕМ процессе, при этом ни одного окна с ним связанного нет, это считается, что WORD запущен?

Kroc
15-10-2004, 00:09
vasketsov
по имени файла процесса
Если применить CreateToolhelp32Snapshot , а затем перебирать с помощью
Process32First и Process32Next ? *Так опять перебирать... Или ещё как?
Поискать по имени КЛАССА окна?
Да уж...(см. свой же вопрос). Нужно вычислить именно запущённое в ЛЮБОЙ форме приложение Оффиса.
Поискать в Running Object Table
Как? Ну, допустим, вызвал я GetRunningObjectTable, получил указатель на ROT, а
дальше... что-то смутно понимаю как это сделать. :(

Вот я что придумал:
перехватить ошибку OleSysError при
GetActiveOleObject('Excel.Application'); // так же с Word
вообще-то работает...

vasketsov
15-10-2004, 18:27
Kroc
1. Сомневаюсь, что будет работать, если Word запущен на другом WindowStation/Desktop и к нему нет доступа.
2. Чую, что задача немного не та решается, например, может надо просто узнать, что определенный файл используется, и т.п.

Kroc
16-10-2004, 00:51
vasketsov
Вообще-то задача такая:
Написал "надстройку для модели COM" для Ворда  и Экселя, чтобы одновременно с их запуском подгружать мой ехешник. Так вот ехешничку и надо подконнектиться...
Всё бы ничего, но при таком запуске как раз одновременности и нет:(  Я засекал время, подключение происходит только через 3-4 секунды после запуска обоих программ.

Kroc
27-10-2004, 00:26
Нормальные герои идут кривым путём :)
uses ... ComObj,...
...
var
   ExAp : Variant;
begin
 try    
//если не найден, вызывается исключение
   ExAp := GetActiveOleObject('Excel.Application');

    except

 end;
...
Аналогично с Word.

Тему можно закрыть...Спасибо всем.




© OSzone.net 2001-2012