我想要检查一个外部应用程序的窗口是否具有垂直或水平滚动条,并使用该窗口的 HWND(句柄)来判断是否可见。有没有任何 WinApi 函数可以获取这些信息?我真的尝试了 GetScrollInfo
函数,但似乎无法检索有关滚动条可见性的信息。
我想要检查一个外部应用程序的窗口是否具有垂直或水平滚动条,并使用该窗口的 HWND(句柄)来判断是否可见。有没有任何 WinApi 函数可以获取这些信息?我真的尝试了 GetScrollInfo
函数,但似乎无法检索有关滚动条可见性的信息。
如何使用GetScrollBarInfo
和OBJID_HSCROLL
或OBJID_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
。
Explorer.exe
包含控件SysTreeView32
和SysListView32
(两者都返回有效的WS_HSCROLL
或WS_VSCROLL
),可以使用GetWindowLong
进行确认。我使用 Spy++ 来确认窗口样式,但没有使用GetScrollBarInfo
进行测试。 - kobik