我在windows桌面上的所有窗口中进行迭代,以便让残疾患者能够轻松地选择并输入它们。
所有的窗户都在用
hw = GetDesktopWindow()
' It's first child is the 1st top level window
hw = GetWindow(hw, GW_CHILD)
'Now loop through all windows
等。
有许多窗口是不可见的或禁用的,我只是跳过它们,因为用户不应该能够选择它们。反正他也打不进去。
现在我面对着一扇陌生的窗户。
它的名字是“Groove Music”。
它是window Groove音乐应用的一个窗口,我可以在任务管理器中看到它。
我使用以下API调用来检查这是否是一个有效的窗口,用户应该能够选择:
IsWindow
IsWindowEnabled
IsWindowVisible
这些API调用的声明是100%完美的,我已经使用它们很多年了。
最后,我甚至检查它的GetWindowRect值来看看它是否在屏幕上。
然后我甚至检查它是否是一个分层窗口(就像一些应用程序用于不可点击的信息的覆盖):
Public Function IsWindowLayered(ByVal uHwnd As Long) As Boolean
Dim lret&
lret = GetWindowLong(uHwnd, GWL_EXSTYLE)
If (lret And WS_EX_LAYERED) = WS_EX_LAYERED Then
IsWindowLayered = True
End If
End Function
它返回false。
有趣的是,窗户实际上是看不见的。
所以用户不应该能够选择它。
我可能错过了哪个函数来检查窗口是否真的可见?
谢谢你!
编辑:这也是计算器窗口(calc。exe)后,我打开它,并再次关闭它。
编辑2:
我也检查WS_VISIBLE像那样,但即使那个窗口返回true:
Public Function IsWindowVisibleEx(ByVal uHwnd As Long) As Boolean
Dim lret&
lret = GetWindowLong(uHwnd, GWL_STYLE)
If (lret And WS_VISIBLE) = WS_VISIBLE Then
IsWindowVisibleEx = True
End If
End Function
编辑3:taskmanager显示Calculator。exe和Groove的状态为“挂起”。