将项目添加到ROT(运行对象表)
我知道如何使用*****。GetActiveObject(ProgId),但是问题是,我使用这个代码行的几个应用程序没有添加到ROT,即使它们已经打开,我得到一个HRESULT错误。 但是,如果我点击另一个应用程序,然后返回到原来的应用程序,代码行工作得很好。
我离开这个如此模糊的原因,是因为这是一个问题,我有超过10个应用程序。
我之所以没有发布代码是因为我不相信这个问题是基于代码的,而是我认为这个问题是由于我的一个简单的缺乏理解。
我遇到这个问题最重要的程序之一是“Microsoft Excel”。 我想要做的就是能够在特定的单元格中启动用户。
我已经看遍了所有关于如何在Excel中使用***** GetActiveObject(ProgId)的一个体面的解释,但是,似乎没有任何合理的答案。 本程序可能用c#编写,但是,如果在visual basic中更简单,那就不是问题
http://support.microsoft.com/kb/316126
COM服务器需要在启动后在运行对象表中注册。 办公室程序在失去焦点时注册自己。 如果程序在程序失去焦点之前尝试附加到正在运行的实例,则可能会收到错误消息。 有关如何解决此问题的其他信息请单击下面文章编号,以查看Microsoft知识库中相应的文章: 316125 PRB:Visual C#.NET附加到运行实例的Office应用程序错误
使用代码,您可以将焦点从Office应用程序更改为您自己的应用程序(或其他应用程序),以允许它在ROT中注册自己。 此外,如果您的代码正在启动Office应用程序的可执行(.exe)文件,则可能需要等待Office应用程序完成加载,然后再尝试附加到正在运行的实例。
尝试连接之前,请确保激活另一个窗口。 如示例中所示,可以使用Form.Activate
来聚焦自己的表单,从而导致Office应用程序失去焦点。