C# 如何检查我是否在版本2010201302016&;中的Word应用程序的打印预览中&;2019
我试图用两种方法检查我是否在打印预览(ctrl+p)中,但它们都不能在上述版本的office上工作 我获取活动Word AppApplication对象的函数是:C# 如何检查我是否在版本2010201302016&;中的Word应用程序的打印预览中&;2019,c#,ms-word,office-interop,word-automation,C#,Ms Word,Office Interop,Word Automation,我试图用两种方法检查我是否在打印预览(ctrl+p)中,但它们都不能在上述版本的office上工作 我获取活动Word AppApplication对象的函数是: using WordApi = Microsoft.Office.Interop.Word; public static WordApi.Application getActiveObject() { WordApi.Application ap; try
using WordApi = Microsoft.Office.Interop.Word;
public static WordApi.Application getActiveObject()
{
WordApi.Application ap;
try
{
ap = (WordApi.Application)Marshal.GetActiveObject("Word.Application");
}
catch (Exception ex)
{
ap = null; // this is important
}
return ap;
}
或
Is应该以两种方式工作,尤其是block 1,但它不能。它只在7号办公室工作。有什么想法吗?在Office应用程序中显示“打印预览”窗口时,功能区内置控件将隐藏在“打印预览”窗口下(或在某些情况下禁用),即显示后台UI。因此,您可以在功能区上找到任何内置控件,并检查其和/或属性 例如,以下VBA代码检查控件在任何时间点是否可见:
Public Sub test()
MsgBox Application.CommandBars("Standard").Controls("New").Visible
End Sub
当
打印预览
页面打开时,您将找不到此类命令栏、控件,或者可以简单地禁用或隐藏它们
本文将深入介绍这种方法。它与Excel相关,但这种方法可以应用于任何Office应用程序。
ap.PrintPreview
适合我。catch
块是否出现错误?如何在项目中定义getActiveObject
?这似乎不是.NET方法,因为它完全缺少必要的参数,所以我们不知道它在做什么,也不知道ap
是否真的是一个运行的Word.Application对象。我建议您在没有所有“助手”的情况下设置一个新项目。您当前的项目显然必须测试基本对象模型代码,然后在当前项目中查找“断开连接”我无法理解您建议我做什么。例如,当您看到我的getActiveObject()
,您建议我如何获取“真实”对象?顺便说一句,我的libs:使用WordApi=Microsoft.Office.Interop.Word代码>好,使用帮助:-)然后该行正在执行它应该执行的操作。我需要再想想……在问题中,你说“它不起作用”,但你没有准确描述它是如何不起作用的。结果
返回什么?总是false
?尝试一个新的WinForms项目,只需一个按钮,即可获取Word.Application并测试打印预览。没什么特别的。我的测试——有效——看起来是这样的,例如:私有的void按钮2_-Click(objectsender,EventArgs e){WordApi.Application ap=(WordApi.Application)Marshal.GetActiveObject(“Word.Application”);Debug.Print(ap.PrintPreview.ToString();}
,打印预览窗口不影响功能区的“已启用”或“可见”属性。但是这个主意很好。你还有别的吗?你走错路了。当您转到“打印”部分时,后台UI将打开,功能区将隐藏。您尝试使用哪个控件来检查可见的和启用的属性?ap.commandbar[“Ribbon”]。启用的或ap.commandbar[“Ribbon”]。可见的在带有idMsoRibbon的功能区上没有控件。您能详细告诉我在我的情况下该怎么办吗?我欣赏你的方法
//block 2
public static bool printPreview()
{
bool result = false;
WordApi.Application ap = getActiveObject();
try
{
if (ap.PrintPreview())
{
result = true;
}
}
catch (Exception ex)
{
MyLogger.Error(ex.ToString());
}
finally
{
if (ap != null)
{
Marshal.ReleaseComObject(ap);
}
}
return result;
}
Public Sub test()
MsgBox Application.CommandBars("Standard").Controls("New").Visible
End Sub