3

我知道如何使用 *****.GetActiveObject(ProgId),但是问题是我使用此代码行的几个应用程序没有添加到 ROT,即使它们已经打开,我也会收到 HRESULT 错误. 但是,如果我单击另一个应用程序然后返回到原始应用程序,代码行就可以正常工作。

我之所以如此含糊不清,是因为这是我在 10 多个应用程序中遇到的问题。

我不发布代码的原因是因为我不相信这个问题是基于代码的,而是我认为这个问题是由于我缺乏理解造成的。

我遇到此问题的最重要的程序之一是“Microsoft Excel”。我想要做的就是能够在特定单元格启动用户。

我已经到处寻找关于如何在 Excel 中使用 *****.GetActiveObject(ProgId) 的体面解释,但是,似乎没有任何合理的答案。该程序可以用 c# 编写,但是,如果它在 Visual Basic 中更简单,那不是问题

4

1 回答 1

2

http://support.microsoft.com/kb/316126

COM 服务器应在启动后在运行对象表中注册。Office 程序在失去焦点时会自行注册。如果程序在失去焦点之前尝试附加到正在运行的实例,您可能会收到一条错误消息。有关如何解决此问题的其他信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:316125 PRB:附加到 Office 应用程序运行实例的 Visual C# .NET 错误

使用代码,您可以将焦点从 Office 应用程序更改为您自己的应用程序(或其他一些应用程序),以允许它在 ROT 中注册自己。此外,如果您的代码正在启动 Office 应用程序的可执行 (.exe) 文件,您可能需要等待 Office 应用程序完成加载,然后再尝试附加到正在运行的实例。

确保在尝试连接之前激活另一个窗口。如示例所示,您可以使用Form.Activate自己的表单来聚焦,从而导致 Office 应用失去焦点。

于 2014-12-12T13:18:03.847 回答