如何使用HWND检查窗口是否有可见的滚动条?

8

我想要检查一个外部应用程序的窗口是否具有垂直或水平滚动条,并使用该窗口的 HWND(句柄)来判断是否可见。有没有任何 WinApi 函数可以获取这些信息?我真的尝试了 GetScrollInfo 函数,但似乎无法检索有关滚动条可见性的信息。

1个回答

17

如何使用GetScrollBarInfoOBJID_HSCROLLOBJID_VSCROLL

如果idObject是OBJID_CLIENT并且由hwnd指定的窗口不是系统滚动条控件,则系统会向窗口发送SBM_GETSCROLLBARINFO消息以获取滚动条信息。这使得GetScrollBarInfo函数能够在模拟滚动条的自定义控件上运行。如果窗口未处理SBM_GETSCROLLBARINFO消息,则GetScrollBarInfo函数会失败。

您可以在SCROLLBARINFO结构中测试rgstate,其中包含一个STATE_SYSTEM_INVISIBLE标志。


另一种可能的方法是测试GetWindowLong(hWnd, GWL_STYLE) and (WS_HSCROLL or WS_VSCROLL) <> 0

看起来很有前途,但无法与Internet Explorer窗口或Explorer.exe应用程序(Windows 7)一起使用。 - Salvador
1
我相信 Explorer.exe 包含控件 SysTreeView32SysListView32(两者都返回有效的 WS_HSCROLLWS_VSCROLL),可以使用 GetWindowLong 进行确认。我使用 Spy++ 来确认窗口样式,但没有使用 GetScrollBarInfo 进行测试。 - kobik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接