3

Word ドキュメントを開き、.bas マクロを実行し、Word を閉じる ac# アプリケーションがあります。それはすべてうまくいきます。マクロは、マクロの結果で 2 つのメッセージ ボックス ダイアログを生成します。これらのメッセージを C# アプリケーションに伝えたいと考えています。これどうやってするの?

これが私のコードです:

        // Object for missing (or optional) arguments.
        object oMissing = System.Reflection.Missing.Value;

        // Create an instance of Word, make it visible,
        // and open Doc1.doc.
        Word.Application oWord = new Word.Application();
        oWord.Visible = true;
        Word.Documents oDocs = oWord.Documents;
        object oFile = @"c:\\Macro.docm";

        // Open the file.
        Word._Document oDoc = oDocs.Open(ref oFile, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing);

        // Run the macro.
        oWord.GetType().InvokeMember("Run",
        System.Reflection.BindingFlags.Default |
        System.Reflection.BindingFlags.InvokeMethod,
        null, oWord, new Object[] { "MyMacro" });

        // Quit Word and clean up.
        oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oDoc);
        oDoc = null;
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oDocs);
        oDocs = null;
        oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oWord);
        oWord = null;

        return "all done!";
4

1 に答える 1

3

これに対して私が過去に使用した解決策は、気弱な人向けではありません。基本的には、昔ながらの Windows API 呼び出しを使用してメッセージ ボックスを検索し、目的のテキストを含むコントロールが見つかるまで、その "ウィンドウ" (コントロール) を列挙します。

メッセージ ボックスのタイトルが常に同じである場合は、API 呼び出し FindWindowEx を使用してウィンドウを見つけることができるはずです。ウィンドウ ハンドルを取得したら、目的のコントロールが見つかるまで EnumChildWindows を使用してそのコントロールを実行できます。通常は、GetWindowText または GetClassName のいずれか、または両方の組み合わせを使用して、適切なコントロールを修飾できます。通常、コントロールのテキストは GetWindowText で利用できるはずですが、MS がこの特定のウィンドウにどのコントロールを使用したかはわかりません。

幸運を!

FindWindowEx の例

EnumChildWindows の例

于 2012-10-21T15:26:08.560 に答える