Я хочу определить направление прокрутки другого приложения.Я могу сделать это, если пользователь прокручивает колесо мыши или клавиатуру (клавиши вверх / вниз / влево / вправо) через крючки.Но я не могу захватить то же самое, когда пользователь использует полосы прокрутки, присутствующие в приложениях, таких как Chrome.
Я пробовал ниже нативный метод, но он не работает для многих приложений, таких как Chrome, и работает для Notepad ++, так как он не может обнаружить полосы прокрутки для Chrome.Я хочу что-то, что работает для всех приложений.
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);
Я провел небольшое исследование, но не смог найти ничего, что могло бы дать мне указания, по которым листается страница.Пожалуйста, дайте мне знать, если требуется дополнительная информация.
Обновление:
Я пытаюсь использовать UI Automation для получения информации о полосе прокрутки для Chrome.
Вот как?
Я создал коллекцию прямоугольников Gui для окон, используя EnumChildWindows
, которая также извлекала дочерние элементы управления.Основываясь на положении мыши, выберите дескриптор окна, чей прямоугольник Gui содержит мою позицию мыши.Дескриптор, который я получил, имел клиентскую область Gui Rectangle = chrome.
Проблема:
Ниже приведен код.И это дает мне пустую коллекцию в elementCollection
в случае Chrome и успешно возвращает 2 элемента полосы прокрутки в случае Notepad ++.
var element = AutomationElement.FromHandle(handle);
if(element != null)
{
Condition condition =
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ScrollBar);
// Find all children that match the specified conditions.
AutomationElementCollection elementCollection =
element.FindAll(TreeScope.SubTree, condition);
}