【问题标题】:How I can check if a Window has visible scrollbars using his HWND?如何使用他的 HWND 检查窗口是否有可见的滚动条?
【发布时间】:2012-03-17 16:37:43
【问题描述】:

我想使用窗口的HWND(句柄)检查外部应用程序的窗口是否有垂直或水平滚动条可见,是否存在任何WinApi函数来获取此信息?我真的尝试了GetScrollInfo 函数,但似乎没有检索有关滚动条可见性的信息。

【问题讨论】:

    标签: c++ windows delphi winapi


    【解决方案1】:

    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)
    • 我相信Explorer.exe 包含控件SysTreeView32SysListView32(都返回有效的WS_HSCROLLWS_VSCROLL)和GetWindowLong。我使用 Spy++ 来确认窗口样式。虽然没有使用GetScrollBarInfo 进行测试。
    猜你喜欢
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多