Всем, добрый день!
Ситуация следующая, ниже приведенным кодом я открываю спецификацию, но при открытии периодически выходит запрос см. рисунок на какую либо спецификацию, как перехватит этот запрос? и автоматически на него ответить, к примеру - "нет".
KompasObject kompas;
try
{
kompas = (KompasObject)Marshal.GetActiveObject("KOMPAS.Application.5");
}
catch /*(Exception)*/
{
Type t = Type.GetTypeFromProgID("KOMPAS.Application.5");
kompas = (KompasObject)Activator.CreateInstance(t);
}
ksSpcDocument Spc = (ksSpcDocument)kompas.SpcDocument();
if (!Spc.ksOpenDocument(FileName, 0))
{
MessageBox.Show("Ошибка открытия документа");
return null;
}
ksSpecification pSpec = (ksSpecification)Spc.GetSpecification();
ksIterator iter = (ksIterator)kompas.GetIterator();
iter.ksCreateSpcIterator(null, 0, 2);
ksSpcColumnParam spcColPar = (ksSpcColumnParam)kompas.GetParamStruct((short)StructType2DEnum.ko_SpcColumnParam);
spcColPar.Init();
int countSp = pSpec.ksGetSpcTableColumn("", 0, 0);
kompas.ksExecuteKompasCommand(33900, false);
int obj = iter.ksMoveIterator("F");
Пробовать подписаться на события: ksSpecificationDescriptionNotify, ksSpecificationObjectNotify и смотреть какое отвечает за диалог.
Попробовать использовать свойство IApplication.HideMessage.
Тоже столкнулся с этой проблемой. Правда у меня сообщение о старой версии файла и предложение преобразовать в новый формат.
А как подписываться на эти события? В асинхронной функции? Если у меня линейный скрипт, то выполнение останавливается пока не ответить на запрос из окна о преобразовании.
Может есть у кого пример реализации такой программы?
Смотрите в примерах SDK, там есть подписка на события.
Похоже Вам надо установить одно из значений
HideMessage -
Скрывать/показывать сообщения - находится свойство в классе IApplication -
Тип данных: константа из перечисления
ksHideMessageEnum.
ЦитироватьksShowMessage 0 Показывать все сообщения и диалоги
ksHideMessageYes 1 Скрывать сообщения и диалоги с выбором ОК или Да, если сообщение или диалог предусматривают такой выбор, с перестроением документа.
ksHideMessageNo 2 Скрывать сообщения с ОК, если имеется только кнопка ОК, сообщения и диалоги с выбором Нет, если сообщение или диалог предусматривают такой выбор, без
перестроения документа
Более подробное описание случаев срабатывания в справке по API
В вашем случае - при запросе на перестроение - Выбрать нужный алгоритм
Цитата из справки
ЦитироватьПримечание:
1. После использования флагов ksHideMessageYes или ksHideMessageNo в прикладной библиотеке необходимо предусматривать взведение флага ksShowMessage по завершении работы библиотеки или команды библиотеки. В противном случае сообщения останутся подавленными в визуальном режиме работы с системой КОМПАС.
2. Константа ksHideMessageYes позволяет выполнять перестроения документа, скрывая все запросы на перестроение.
3. Константа ksHideMessageNo позволяет не выполнять перестроения документа, скрывая все запросы на перестроение.
НЕ ЗАБЫТЬ после работы программы вернуть состояние скрытия сообщений в первоначальное состояние
Спасибо! HideMessage зарешал мою проблему.