概要
本文阐述如何从 Microsoft Visual C# .NET 获取 Microsoft Office 应用程序的窗口句柄并同时使该应用程序自动运行。更多信息
大多数 Microsoft Office 应用程序的对象模型不公开用于检索应用程序窗口句柄的属性。要确定您想使其自动运行的 Office 应用程序的窗口句柄,可以使用 FindWindow 函数并将该应用程序的最顶层窗口的类名作为参数。如果该应用程序可以同时运行多个实例,则可能需要考虑到这一点以便检索到正确的窗口句柄。下面几部分说明了针对单实例和多实例应用程序来检索窗口句柄的技巧。注意:Microsoft Access 对象模型公开了 Application 对象的 hWndAccessApp 属性,用以确定应用程序的窗口句柄。您还可以使用 Forms 和 Reports 的 hWnd 属性来检索这些特定窗口的句柄。此外,Microsoft Excel 2002 是第一个为其 Application 对象引入 hWnd 属性的 Excel 版本。对于 Excel 2002 和 Access 97 及各自的更高版本而言,由于这些 Office 应用程序分别提供了通过其各自的对象模型来检索应用程序窗口句柄的方法,因此不需要使用本文所讨论的 FindWindow 方法。
查找单实例应用程序的窗口句柄
下列步骤说明如何在 Visual C# 自动化客户端中使用 FindWindow 函数来确定只能有单个实例的进程外自动化服务器的窗口句柄。这是在将 PowerPoint 用作自动化服务器时所使用的技巧。分步示例
- 启动 Microsoft Visual Studio .NET。
- 在文件菜单上,单击新建,然后单击项目。从 Visual C# 项目类型中选择 Windows 应用程序。默认情况下会创建 Form1。
- 添加对 Microsoft PowerPoint 对象库的引用。为此,请按照下列步骤操作:
- 在项目菜单上,单击添加引用。
- 在 COM 选项卡上,找到 Microsoft Powerpoint 对象库,然后单击选择。
注意:Microsoft Office 2003 包含主 Interop 程序集 (PIA)。Microsoft Office XP 不包含 PIA,但您可以下载 PIA。 有关 Office XP PIA 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:328912 INFO:Microsoft Office XP PIA 可供下载
- 在添加引用对话框中单击确定以接受您的选择。
- 在视图菜单上,选择工具箱以显示工具箱,然后向窗体中添加一个按钮。
- 按 F7 键查看 Form1 的代码窗口。
- 将下列指令添加到在代码窗口的顶部定义的 using 指令的列表:
using System.Runtime.InteropServices; using PowerPoint = Microsoft.Office.Interop.PowerPoint;
- 将下面的代码添加到指令定义之后:
public class MyApi { [DllImport("user32.dll")] public static extern int FindWindow(string strclassName, string strWindowName); };
- 将下面的代码添加到 Button1 的 Click 事件:
int hwndPPt; PowerPoint.Application pptApp; pptApp = new PowerPoint.Application(); pptApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; hwndPPt = MyApi.FindWindow("PP10FrameClass",null); MessageBox.Show("hwndPPt (0x" + hwndPPt.ToString("x") + ") has a Window handle to PowerPoint's main Window. " + "/r/n" + "Click OK to close Powerpoint" , "Handle for PowerPoint"); pptApp.Quit();
注意:“PP10FrameClass”是 Microsoft PowerPoint 2002 应用程序窗口的类名。如果您要使 Microsoft Office PowerPoint 2003 自动运行,请将代码中的该类名更改为“PP11FrameClass”。 - 按 F5 键并单击 Button1 以运行该示例。
查找可以有多个实例的应用程序的窗口句柄
某些应用程序(如 Microsoft Excel 或 Microsoft Word)可以有多个同时运行的实例。要检索您想使其自动运行的应用程序实例的句柄,可以首先使用“自动化”来将该应用程序的标题更改为一个唯一的值,然后使用 FindWindow API 函数检索其窗口句柄。下面的步骤使用 Excel 作为自动化服务器来说明这一技巧。分步示例
- 启动 Microsoft Visual Studio .NET。
- 在文件菜单上,单击新建,然后单击项目。从 Visual C# 项目类型中选择 Windows 应用程序。默认情况下会创建 Form1。
- 添加对 Microsoft Excel 对象库的引用。为此,请按照下列步骤操作:
- 在项目菜单上,单击添加引用。
- 在 COM 选项卡上,找到 Microsoft Excel 对象库,然后单击选择。
注意:Microsoft Office 2003 包含主 Interop 程序集 (PIA)。Microsoft Office XP 不包含 PIA,但您可以下载 PIA。 有关 Office XP PIA 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:328912 INFO:Microsoft Office XP PIA 可供下载
- 在添加引用对话框中单击确定以接受您的选择。
- 在视图菜单上,选择工具箱以显示工具箱,然后向窗体中添加一个按钮。
- 按 F7 键查看 Form1 的代码窗口。
- 将下列指令添加到在代码窗口的顶部定义的 using 指令的列表:
using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel;
- 将下面的代码添加到指令定义之后:
public class MyApi { [DllImport("user32.dll")] public static extern int FindWindow(string strclassName, string strWindowName); };
- 将下面的代码添加到 Button1 的 Click 事件:
int hwndExcel; Excel.Application xlapp; xlapp = new Excel.Application(); xlapp.Visible = true; xlapp.Caption = "Some Caption For Excel Window"; hwndExcel = MyApi.FindWindow("XLMAIN",xlapp.Caption); xlapp.Caption = null; MessageBox.Show("hwndExcel (0x" + hwndExcel.ToString("x") + ") has a Window handle to Excel's main Window." + "/r/n" + "Click OK to close Excel" , "Handle for Excel"); xlapp.Quit();
- 按 F5 键并单击 Button1 以运行该示例。
参考
有关更多信息,请访问下面的 Microsoft Developer Network (MSDN) Web 站点:Microsoft Office Development with Visual Studio(使用 Visual Studio 进行 Microsoft Office 开发)
http://msdn.microsoft.com/library/en-us/dnoffdev/html/vsofficedev.asp
302281 HOWTO:使用 VB.Net 获取 Office 自动化服务器的窗口句柄
这篇文章中的信息适用于:
- Microsoft Visual C# .NET (2003)
- Microsoft Visual C# .NET (2002)
- Microsoft Office Access 2003
- Microsoft Access 2002
- Microsoft Office Excel 2003
- Microsoft Excel 2002
- Microsoft Office PowerPoint 2003
- Microsoft PowerPoint 2002
- Microsoft Office Word 2003
- Microsoft Word 2002
最近更新: | 2004-2-13 (6.0) |
关键字: | kbPIA kbAutomation kbhowto KB302295 |