В Excel 2016, как я могу убедиться, что занятое приложение правильно игнорирует / отклоняет запросы на обработку новых электронных таблиц или открытых файлов
Перейдя в Excel 2016, мы столкнулись с проблемой, когда попытка открыть новый экземпляр Excel из меню "Пуск", командной строки или списка переходов теперь приводит к тому, что мы ничего не делаем, в то время как наше дополнение VSTO выполняет работу в задачах и блокирует (с сообщением прокачка) по основной теме. Похоже, что новый экземпляр Excel понимает, что он существует, и пытается вместо этого обработать его.
Конечно, я хотел бы, чтобы новый экземпляр Excel открывался прозрачно.
Обратите внимание, что пока надстройки выполняются в надстройке, они используют DispatcherFrame
чтобы обеспечить прокачку сообщений, и нет никаких раздражающих сообщений такого рода This window is waiting for an OLE action to complete
или прерывается при отладке, потому что окно не отвечает в течение 30 секунд или около того. Я считаю, что удаление этого могло бы помочь, но это также вызвало бы другие проблемы, поэтому я не хотел бы идти туда.
Подходы предпринимались:
- Включение
Application.IgnoreRemoteRequests
(без влияния) - подклассов
Application.hWnd
с обычаемdelegate int Win32WndProc(IntPtr hWnd, int msg, int wParam, int lParam);
с помощьюIntPtr SetWindowLong(IntPtr hWnd, int nIndex, Win32WndProc newProc)
(сообщения на самом деле не получены)
То, что я не пробовал (и не знаю, стоит ли)
- Попытка выяснить, реализует ли Excel сервер WCF в Office 2016, и перехватывать на него сообщения
- Временное удаление ссылки на приложение из ROT (таблицы запущенных объектов) или иным образом выполнение каких-либо действий непосредственно в ROT.
- Проверка других hWnds под тем, что сообщили
Application
в случае, если сообщения отправляются непосредственно на них (не знаю, с чего начать)
Может кто-нибудь объяснить, что на самом деле здесь происходит, и как этого избежать?