C# 在Vista中使用MSWord interop在我的应用程序后面打开拼写检查窗口

C# 在Vista中使用MSWord interop在我的应用程序后面打开拼写检查窗口,c#,winforms,interop,ms-word,spell-checking,C#,Winforms,Interop,Ms Word,Spell Checking,我正在使用MSWordinterop检查应用程序中的语法/拼写。我使用以下步骤来完成此操作: 创建新的单线程单元以不锁定应用程序的窗体 禁用我的应用程序的输入 使用反射(与版本无关) 我正在使用此代码打开Word: objWord = System.Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application")); Object objDocuments = objWord.GetType().InvokeMember("D

我正在使用
MSWord
interop检查应用程序中的语法/拼写。我使用以下步骤来完成此操作:

  • 创建新的单线程单元以不锁定应用程序的窗体
  • 禁用我的应用程序的输入
  • 使用反射(与版本无关)
  • 我正在使用此代码打开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中,拼写检查窗口才会在我的应用程序后面打开,我需要使用ALT+TAB来显示单词的窗口

    有没有人遇到过这个问题,或者有没有解决这个问题的建议

    我试着打电话

    objDoc.GetType().GetMethod("Activate").Invoke(objDoc, null);
    
    但它不起作用。其他“聚焦”方法也不适用


    谢谢

    尝试在Word的
    应用程序
    对象上调用
    激活
    。(不是
    文档
    对象)


    编辑:在显示拼写检查对话框之前尝试调用它。

    我已经尝试了两种方法:聚焦和激活。不过还是要谢谢你。我试了所有的方法,都很专注,并且在每一个看似合理的位置都进行了激活,但都没有成功。