У меня есть служба, которая должна запускать приложение (назовем его X), которое в сети использует автоматизацию Excel.
Часто приложение X при автоматизации Excel будет отображать диалоговое окно Excel.Что и почему отображаемые диалоговые окна не важны, к сожалению, это вне моего контроля.
Я просто хотел бы иметь возможность закрыть это диалоговое окно в Excel.
Это, конечно,легко сделать, когда код не работает как сервис.Проблема состоит в том, что любой вызов окна win32 возвращает 0 для дескриптора при перечислении окон, чтобы определить, запущен ли диалог.Я понимаю, почему это так, поскольку служба работает изолированно и ожидается результат 0.
Также невозможно, чтобы служба работала в локальной системе с включенным интерактивным рабочим столом.
Я надеялсячтобы использовать GetThreadDesktop в потоке для процесса Excel, затем откройте этот рабочий стол, чтобы перечислить эти окна, однако при запуске из службы api также возвращает 0.
Существует множество вопросов по этому поводу, однако большинство из нихо желании отобразить диалог из службы для взаимодействия с пользователем.Я не хочу этого делать.Просто найдите и закройте диалоговое окно.
Есть ли хитрый обходной путь, который кто-то обнаружил для перечисления окон и возврата подписей?
Примечания:
- ПриложениеX вне моего контроля.
- Я знаю, что автоматизация делопроизводства не поддерживается в неинтерактивной среде.
- В любом случае я не пытаюсь взаимодействовать с рабочим столом вошедшего в систему пользователя.