Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как в Delphi узнать, запущен ли Word или Excel (http://forum.oszone.net/showthread.php?t=29351)

Kroc 14-10-2004 00:57 203474

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

vasketsov 14-10-2004 13:32 203475

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

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

Kroc 15-10-2004 00:09 203476

vasketsov
Цитата:

по имени файла процесса
Если применить CreateToolhelp32Snapshot , а затем перебирать с помощью
Process32First и Process32Next ? *Так опять перебирать... Или ещё как?
Цитата:

Поискать по имени КЛАССА окна?
Да уж...(см. свой же вопрос). Нужно вычислить именно запущённое в ЛЮБОЙ форме приложение Оффиса.
Цитата:

Поискать в Running Object Table
Как? Ну, допустим, вызвал я GetRunningObjectTable, получил указатель на ROT, а
дальше... что-то смутно понимаю как это сделать. :(

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

vasketsov 15-10-2004 18:27 203477

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

Kroc 16-10-2004 00:51 203478

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

Kroc 27-10-2004 00:26 203479

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

    except

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

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


Время: 19:26.

Время: 19:26.
© OSzone.net 2001-