早上好。
我有一个问题,让我的代码来查找其他实例的word,并遇到了很多谷歌搜索后的砖墙。
下面的代码将查找所有打开的word文档,并将它们填充到一个组合框中。
我的问题是,我们的应用程序(我无法控制这些应用程序)将在新实例中打开word文档,因此我的代码无法找到/控制这些文档。
有什么想法吗?
Dim objWordDocument As Word.Document
Dim objWordApplication As Word.Application
'//find all open word documents
Set objWordApplication = GetObject(, "Word.Application")
'//clear combobox
OpenDocs.Clear
'//add all open documents to combo box
For Each objWordDocument In objWordApplication.Documents
OpenDocs.AddItem objWordDocument.Name
Next objWordDocument发布于 2012-11-30 04:57:19
根据我所看到的,并逐渐理解,唯一确定的方法是迭代word的运行实例,然后依次杀死每个实例,以确保您将获得下一个实例。
由于word对自身的每个实例都以完全相同的方式在运行对象表中注册,因此如果不先关闭您正在查看的实例,就无法通过它们。
这种方法的一种选择是在杀死应用程序实例时获取所有文件名,然后将它们加载回您创建的一个实例中。
或者,如果你知道打开文件的名称,你可以通过打开文件的名称“getObject”,因为Word会将它的文档名称推入运行对象表中,不幸的是,这听起来不像你的情况。
如果不编写active x MFC服务,您将无法完成您想要做的事情。
我希望这能对你有所帮助。
编辑:
关于子类化和windows API获取句柄以改变焦点的讨论非常广泛。http://www.xtremevbtalk.com/showthread.php?t=314637
如果您首先深入到该标题,并能够通过hwnd枚举单词instance,那么您可能会依次关注每个实例,然后列出文件名。但我要警告你,这是一些讨厌的子类化,这是黑魔法,只有那些真正想要无意中破坏东西的人才会使用。
在任何情况下,如果您想查看一个实例,终止、重复、重新打开,请尝试以下操作:
改编自这个主题:http://www.xtremevbtalk.com/showthread.php?t=316776
Set objWordApplication = GetObject(, "Word.Application")
'//clear combobox
OpenDocs.Clear
'//add all open documents to combo box
Do While Not objWordDocument is nothing
For Each objWordDocument In objWordApplication.Documents
OpenDocs.AddItem objWordDocument.Name
Next objWordDocument
objWordApplication.Quit False
Set objWordApplication = Nothing
Set objWordApplication = GetObject(, "Word.Application")
loop
** use create object to open a new instance of word here and then go though
** your list of files until you have opened them all as documents in the new
** instance.发布于 2019-01-29 03:13:42
这是一个旧的线程,但是我也需要迭代Word实例并在这里颠簸。
按照@Pow-Ian的建议,我试着去做
如果您首先深入到该标题,并且能够通过hwnd枚举单词
,那么您可能会依次关注每个实例,然后列出文件名。
虽然我已经设法获得了所有的句柄,但我发现了一种通过AccessibleObjectFromWindow处理办公应用程序的更简单的策略,我们的问题现在已经解决了。
另外,我相信显示@Pow-lan's的代码在
Do While Not objWordDocument is nothing并且应该是:
Do While Not objWordApplication is nothinghttps://stackoverflow.com/questions/13633551
复制相似问题