IsWindowVisible() 是否可以在 Excel 窗口打开时返回 false

Can IsWindowVisible() return false when an Excel window is open

本文关键字:窗口 false 返回 Excel 是否 IsWindowVisible      更新时间:2023-10-16

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

在这个问题中,我正在寻找一种方法来清楚地识别何时关闭 excel 窗口。我从堆栈溢出中没有得到答案。

我想到了一种新的方法(除了我在上一个问题中描述的方式)我可以确定 excel 是否关闭。在这里。

使用 获取 excel 的窗口句柄

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

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

我的问题是,在正常使用Excel期间,即使excel没有关闭,IsWindowVisible()是否会返回false?

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

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

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

窗口仍然存在时,Excel 不会关闭。

它根本不可见,您可以自动化Excel或WinWord并打开文档,而Excel根本不可见。

这个小的VBS代码启动excel使其可见并再次隐藏它。当 Excel 不可见但仍"未关闭"时,您的检查将始终返回 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已将其关闭。

PS:您应该以更精确的方式定义"已关闭"。