根据我所见并理解,唯一可靠的方法是遍历 word 的运行实例,然后依次杀死每个实例,以确保您获得下一个实例。
由于单词在运行对象表中的每个实例都以完全相同的方式注册,因此如果不先关闭您正在查看的对象,就无法通过它们。
这种方法的一个选项(可能是不可取的)是在您终止应用程序实例时获取所有文件名,然后将它们全部加载回您创建的一个实例中。
或者,如果您知道打开文件的名称,您可以通过打开文件名“getObject”,因为 Word 会将其文档名称推送到正在运行的对象表中,遗憾的是这听起来不像您的情况。
如果不编写活动的 x MFC 服务,您将无法做您想做的事情。
我希望这会有所帮助。
编辑:
关于子类化和 Windows API 以获得句柄以改变焦点进行了广泛的讨论。http://www.xtremevbtalk.com/showthread.php?t=314637
如果您首先深入到该头部并能够通过 hwnd 枚举单词实例,那么您可能会依次关注每个实例,然后列出文件名。不过我确实警告过你;那是一些令人讨厌的子类化,这是只有一些真正想不小心破坏东西的人才会玩的黑魔法。
无论如何,如果您想查看一个实例,请杀死,重复,重新打开试试这个:
改编自此线程: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.