3

アプリケーションで相互運用機能を使用してMSWord文法/スペルをチェックしています。私はこれを行うためにこれらの手順を使用しています:

  1. アプリケーションのフォームをロックしないように、新しいシングル スレッド アパートメントを作成する
  2. アプリケーションの入力を無効にする
  3. リフレクションの使用 (MSOfficeバージョン非依存)

このコードを使用して Word を開きます。

objWord = System.Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
Object objDocuments = objWord.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, objWord, null);
objDoc = objDocuments.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objDocuments, null);
objContent = objDoc.GetType().InvokeMember("Content", BindingFlags.GetProperty, null, objDoc, null);

IDataObject oldObjData = Clipboard.GetDataObject();
Clipboard.SetDataObject(text);

objContent.GetType().InvokeMember("Paste", BindingFlags.InvokeMethod, null, objContent, null);

objDoc.GetType().GetMethod("CheckGrammar").Invoke(objDoc, null);
objWord.GetType().GetProperty("Visible").SetValue(objWord, false, null);
objContent.GetType().InvokeMember("Cut", BindingFlags.InvokeMethod, null, objContent, null);

IDataObject objData = Clipboard.GetDataObject();

objDoc.GetType().GetProperty("Saved").SetValue(objDoc, true, null);
objDoc.GetType().GetMethod("Close").Invoke(objDoc, new Object[] { null, null, null });
objWord.GetType().GetMethod("Quit").Invoke(objWord, new Object[] { null, null, null });

しかし、これを呼び出すと、Windows Vista でのみ、SpellCheck ウィンドウがアプリケーションの後ろに開き、Alt + Tabを使用して Word のウィンドウを表示する必要があります。

誰かがこの問題を抱えていた、または解決方法を提案していますか?

電話してみた

objDoc.GetType().GetMethod("Activate").Invoke(objDoc, null);

しかし、うまくいきません。他の「フォーカス」メソッドもありません。

ありがとう

4

1 に答える 1

1

ActivateWord のApplicationオブジェクトを呼び出してみてください。(Document対象物ではありません)

EDIT : スペル チェック ダイアログを表示する前に呼び出してみてください。

于 2009-08-06T14:41:01.680 に答える