我正在使用MSWord
互操作来检查我的应用程序中的语法/拼写。我正在使用这些步骤来做到这一点:
- 创建一个新的单线程单元以不锁定我的应用程序的表单
- 禁用我的应用程序的输入
- 使用反射(与
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 中,拼写检查窗口会在我的应用程序后面打开,我需要使用ALT+TAB来显示 Word 的窗口。
有人遇到这个问题或有如何解决的建议吗?
我试着打电话
objDoc.GetType().GetMethod("Activate").Invoke(objDoc, null);
但它不起作用。其他“聚焦”方法也没有。
谢谢