IsWindowVisible() 是否可以在 Excel 窗口打开时返回 false
Can IsWindowVisible() return false when an Excel window is open
我正在从我的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:您应该以更精确的方式定义"已关闭"。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 伪造事实↔false
- QueryWorkingSet总是返回false
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- SFML RenderWindow打开窗口需要很长时间
- 如何区分地图中的 0 和 false?
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 当在拖动/调整窗口大小的同时对窗口调用isActive()时,返回false.(X11,问题5.4.0)
- IsWindowVisible() 是否可以在 Excel 窗口打开时返回 false
- IsIconic()总是返回false,而OpenIcon()从不打开窗口