当Excel窗口打开时,IsWindowVisible()可以返回false

我从我的Qt应用程序自动化Excel窗口。

在这个问题中,我正在寻找一种方法来清楚地确定一个excel窗口何时closures。 我没有从堆栈溢出的答案。

我想到了一个新的方法(除了我之前提到的问题之外)我可以确定是否closures了excel。 这里是。

获取excel的窗口句柄

excel->property("Hwnd").toInt(); 

然后使用IsWindowVisible() WIN32 API定期检查窗口是否可见。 如果窗口不可见,则假定excel已closures。

我的问题是,在正常使用Excel的过程中,IsWindowVisible()是否会返回false,即使excel没有closures?

也许IsWindow()函数在这里会更适合? 这个函数检查描述符是否存在,当窗口确实存在(显示或隐藏,但存在)时,它将返回正确的结果。 但是不要忘记,HWND对于窗口来说并不是唯一的,如果窗口被closures并且再次打开,它将得到新的HWND

 if(IsWindow(someHwnd)){ }else{ } 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633528(v=vs.85).aspx

当窗口仍然存在时,Excel不会closures。

这是不可见的,你可以自动化Excel或WinWord,打开文档,Excel是不可见的。

这个小VBS代码启动Excel使其可见,并再次隐藏。 当Excel不可见但仍“未closures”时,您的支票将始终返回false。

 Set oXL = CreateObject("Excel.Application") MsgBox "Created but not visible" oXL.Visible = True MsgBox "Created but and visible" oXL.Visible = False MsgBox "Created but not visible again " Set oXL = Nothing MsgBox "Closed (Terminated) now" 

实际上唯一的方法是检查窗口何时不存在(IsWindow)。

如果引用特定文档,则可能更容易检查文档是否仍然列在IROT表中。 如果不。 Excel已closures它。

PS:你应该更精确地定义“Closed”。