当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”。