3

*****.GetActiveObject(ProgId) の使用方法は知っていますが、問題は、このコード行を使用するいくつかのアプリケーションが ROT に追加されないことです。既に開いている場合でも、HRESULT エラーが発生します。 . ただし、別のアプリケーションをクリックしてから元のアプリケーションに戻ると、コード行は正常に機能します。

これをあいまいなままにしている理由は、これが 10 以上のアプリケーションで発生している問題だからです。

私がコードを投稿しない理由は、この問題がコードベースであるとは考えていないためです。むしろ、この問題は私の単純な理解不足によるものだと考えています。

この問題が発生している最も重要なプログラムの 1 つは "Microsoft Excel" です。私がやりたいのは、特定のセルでユーザーを開始できることだけです。

Excel で *****.GetActiveObject(ProgId) を使用する方法について適切な説明を探しましたが、合理的な答えはないようです。プログラムは c# で記述できますが、Visual Basic の方が簡単であれば問題ありません。

4

1 に答える 1

2

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

COM サーバーは、起動後に実行中のオブジェクト テーブルに自身を登録する必要があります。Office プログラムは、フォーカスを失うと自分自身を登録します。プログラムがフォーカスを失う前に実行中のインスタンスにアタッチしようとすると、エラー メッセージが表示されることがあります。この問題を回避する方法の詳細については、以下の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください: 316125 PRB: Office アプリケーションの実行中のインスタンスにアタッチする Visual C# .NET エラー

コードを使用して、Office アプリケーションから独自のアプリケーション (または他のアプリケーション) にフォーカスを変更して、ROT に登録できるようにすることができます。さらに、コードが Office アプリケーションの実行可能 (.exe) ファイルを開始している場合、実行中のインスタンスにアタッチする前に、Office アプリケーションの読み込みが完了するまで待つ必要がある場合があります。

接続を試みる前に、別のウィンドウがアクティブになっていることを確認してください。例に示されているように、 を使用Form.Activateして独自のフォームにフォーカスを当てることができるため、Office アプリのフォーカスが失われます。

于 2014-12-12T13:18:03.847 に答える