Добавьте элементы в ROT(Таблица Бегущих Объектов)

Я знаю, как использовать *****.GetActiveObject(ProgId), однако проблема в том, что некоторые из приложений, на которых я использую эту строку кода, не добавляются в ROT, даже если они уже открыты, я получаю ошибку HRESULT, Однако, если я нажимаю на другое приложение, а затем возвращаюсь к исходному приложению, строка кода работает просто отлично.

Причина, по которой я оставляю это столь расплывчатым, заключается в том, что это проблема, с которой я сталкиваюсь в 10+ приложениях.

Причина, по которой я не публикую код, заключается в том, что я не считаю, что эта проблема основана на коде, скорее, я считаю, что эта проблема вызвана простым непониманием с моей стороны.

Одна из наиболее важных программ, с которыми я сталкиваюсь, это "Microsoft Excel". Все, что я хочу сделать, это иметь возможность запустить пользователя в определенной ячейке.

Я искал во всем приличное объяснение того, как использовать *****. GetActiveObject (ProgId) в Excel, однако, похоже, нет никаких разумных ответов. Программа может быть написана на C#, однако, если это проще в Visual Basic, это не проблема

1 ответ

Решение

http://support.microsoft.com/kb/316126

Ожидается, что COM-серверы зарегистрируются в таблице запущенных объектов после запуска. Офисные программы регистрируют себя, когда теряют фокус. Если программа пытается подключиться к работающему экземпляру до того, как она потеряет фокус, вы можете получить сообщение об ошибке. Для получения дополнительных сведений о том, как обойти эту проблему, щелкните номер статьи ниже, чтобы просмотреть статью в базе знаний Майкрософт: 316125 PRB: ошибка Visual C# .NET при подключении к экземпляру приложения Office

Используя код, вы можете изменить фокус с приложения Office на ваше собственное приложение (или на какое-либо другое приложение), чтобы позволить ему регистрироваться в ROT. Кроме того, если ваш код запускает исполняемый файл (.exe) для приложения Office, вам может потребоваться дождаться завершения загрузки приложения Office, прежде чем пытаться подключиться к работающему экземпляру.

Убедитесь, что другое окно активировано, прежде чем пытаться подключиться. Как показано в примере, вы можете использовать Form.Activate сфокусировать свою форму, в результате чего приложение Office теряет фокус.

Другие вопросы по тегам