C# SCROLLINFO 不适用于 Chrome 窗口

问题描述 投票:0回答:1

我试图从窗口句柄检索滚动信息,但我一直得到 0 值。我采用这种方法是因为我的目标是捕获窗口的完整滚动屏幕截图。目的是实现自动滚动和图像捕获。虽然我已经成功实现了自动窗口滚动,但我遇到了不同窗口的滚动行为的变化。

例如,发送 100 的鼠标增量会导致 Chrome 滚动大约 70 像素,而 Visual Studio 滚动大约 110 像素。每个窗口似乎都表现出不同的滚动特征。因此,我当前的目标是使用滚动条计算滚动期间像素移动的精确量。然而,我在实现这个功能时遇到了困难。

// get scrollbar info
SCROLLINFO scrollinfo = new SCROLLINFO();
scrollinfo.cbSize = (uint)Marshal.SizeOf(scrollinfo);
scrollinfo.fMask = SIF_ALL; // Get all the scroll bar information.
bool horBar = GetScrollInfo1(windowHandle, SB_HORZ, out scrollinfo);
Console.WriteLine(horBar);
bool vertBar = GetScrollInfo1(windowHandle, SB_VERT, out scrollinfo);
Console.WriteLine(vertBar);
Console.WriteLine(scrollinfo.nPage + ", " + scrollinfo.nPos);

[DllImport("user32.dll")]
public static extern bool GetScrollInfo(IntPtr hWnd, int fnBar, ref SCROLLINFO lpsi);
c# windows winapi scroll user32
1个回答
0
投票

使用前请确保正确初始化

SCROLLINFO
结构。

SCROLLINFO scrollinfo = new SCROLLINFO();
scrollinfo.cbSize = (uint)Marshal.SizeOf(typeof(SCROLLINFO));
scrollinfo.fMask = SIF_ALL; // or SIF_PAGE | SIF_POS, etc.

并处理

return
GetScrollInfo
值:
GetScrollInfo
函数返回一个布尔值,指示成功或失败。确保检查此返回值以确保确实正在检索滚动信息。

bool success = GetScrollInfo(windowHandle, SB_HORZ, ref scrollinfo);
if (success)
{
    // Process scrollinfo here
}
else
{
    // Handle error here
}

使用右滚动条常量:

fnBar
函数中的
GetScrollInfo
参数指示您是否正在查询水平或垂直滚动条。确保您使用正确的常量值:
SB_HORZ
表示水平滚动条,
SB_VERT
表示垂直滚动条。

© www.soinside.com 2019 - 2024. All rights reserved.