我已经尝试了几件事。
首先:
GetScrollInfo(handle, (int)ScrollBarDirection.SB_VERT, ref si);
// Increase position by 1 pixels
si.nPos += 1;
// Reposition scroller
SetScrollInfo(handle, (int)ScrollBarDirection.SB_VERT, ref si, true);
但是它不起作用,我已经尝试了所有可以找到的与 Spy 关联的窗口句柄,但它们都没有让步。
我已经尝试将 SendInput 与 AutoScroll 结合使用,但它也没有这样做(我怀疑这是因为我正在快速连续地进行鼠标点击和移动 - 但我不想因为它而延迟它们会干扰人们使用word来输入/等,而且这样做感觉不对。注意我已经尝试了鼠标中键的单击和双击组合)这是代码:
INPUT mouseMoveInput = new INPUT();
mouseMoveInput.type = SendInputEventType.InputMouse;
mouseMoveInput.mkhi.mi.dx = left;
mouseMoveInput.mkhi.mi.dy = top;
mouseMoveInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_ABSOLUTE | MouseEventFlags.MOUSEEVENTF_MOVE;
SendInput(1, ref mouseMoveInput, Marshal.SizeOf(new INPUT()));
INPUT mouseDownInput = new INPUT();
mouseDownInput.type = SendInputEventType.InputMouse;
mouseDownInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MIDDLEDOWN;
SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));
INPUT mouseUpInput = new INPUT();
mouseUpInput.type = SendInputEventType.InputMouse;
mouseUpInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MIDDLEUP;
SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));
SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
mouseMoveInput.mkhi.mi.dx = 0;
mouseMoveInput.mkhi.mi.dy = 150;
mouseMoveInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE;
SendInput(1, ref mouseMoveInput, Marshal.SizeOf(new INPUT()));
SendInput(1, ref mouseDownInput, Marshal.SizeOf(new INPUT()));
SendInput(1, ref mouseUpInput, Marshal.SizeOf(new INPUT()));
word application com 对象附带的 smallscroll 和 autoscroll 要么是整行跳转,要么是让鼠标处于任何移动都将文档摆动到各处的状态。
我希望一次滚动单个像素,因为它看起来更平滑,但希望以编程方式控制它而不干扰用户