Что нового

Как управлять бегунком прокрутки документа

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
Уважаемые знатоки autoit.
Хотел бы задать вопрос общего характера.

Я давно мучаюсь одним серьезным вопросом.

Вот, практически в любых программах - есть такая вещь как бегунок прокрутки.
В экселе например, этот бегунок прокрутки страницы по вертикали называется : Class NetUIHWND, Instance 4.
Я обыскал весь форум, но нигде не нашел информации - как этим бегунком можно управлять.
Ведь если этот элемент присутствует, то наверное и управлять им как-то можно.

Именно управлять бегунком, а не использовать клавиши Page Up - Page Down.
(Непонятно по какой схеме происходит перемещение бегунка - по процентам, по пикселям или как-то еще.)

Подскажите как в документе 111.xls переместить бегунок - на середину полосы прокрутки ?
 

Вложения

  • 111.rar
    6.1 КБ · Просмотры: 2

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OlegSmirnov [?]
Ведь если этот элемент присутствует, то наверное и управлять им как-то можно.
Этот элемент - для пользователя. Вам-то он зачем?
Допустим, вы узнаете, что бегунок находится в позиции 158. Или смещён на 23%. И установите его в позицию 290. Или переместите на 50%. И что?
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
Как зачем ?
Если на кнопку можно нажимать, то и бегунок наверное можно как-то прокручивать.
Вот я и интересуюсь - как именно можно прокручивать этот бегунок.

На форуме не нашел никакой информации на этот счет.
Вот и спрашиваю.

Допустим - если бегунок окажется в позиции 50% - то запустится какое-нибудь сообщение.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OlegSmirnov [?]
как именно можно прокручивать этот бегунок
если бегунок окажется в позиции 50%
Устанавливать в положение и отслеживать положение - это совсем не одно и то же. Отслеживать можно так (для Excel 2010)
Код:
#include <UIAutomate.au3> ; http://autoit-script.ru/index.php/topic,16780.0.html
#include <Excel.au3>

$sFilePath = @ScriptDir & "\111.xls"
$oExcel = _Excel_Open()
$oBook = _Excel_BookOpen($oExcel, $sFilePath)
If @error Then Exit MsgBox(0, "", "Ошибка открытия файла")

$oParent = _UIA_GetElementFromHandle(WinGetHandle("[class:XLMAIN]"))
If @error Then Exit MsgBox(0, "", "Не найдено окно Excel")

$oScrollBar = _UIA_GetControlTypeElement($oParent, "UIA_ScrollBarControlTypeId", "вертикальной", "HelpText", True)
If @error Then Exit MsgBox(0, "", "Не найдена вертикальная прокрутка")

While Sleep(111)
  $iValue = _UIA_ElementGetPropertyValue($oScrollBar, "LegacyIAccessible.Value")
  ToolTip($iValue)
  If $iValue = 50 Then
    MsgBox(0, "", "Сообщение", 1)
    While Sleep(111)
      $iValue = _UIA_ElementGetPropertyValue($oScrollBar, "LegacyIAccessible.Value")
      ToolTip($iValue)
      If $iValue <> 50 Then ExitLoop
    WEnd
  EndIf
WEnd
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
InnI , а что именно делает этот скрипт ?

Я его запускаю - двигаю бегунок вертикальной прокрутки - ничего не происходит...
(Рядом с курсором при этом - постоянно находится цифра 0 )

Ставлю его в положение 50% - ничего не происходит.

У меня данные по бегунку выглядят так:
 

Вложения

  • Скриншот.jpg
    Скриншот.jpg
    111.1 КБ · Просмотры: 10

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OlegSmirnov [?]
что именно делает этот скрипт
Считывает текущее значение прокрутки в процентах.

Запустите скрипт из SciTE по F5 - в консоль редактора будут ошибки выводиться.
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
InnI ,
Я запустил скрипт из SciTE по F5
Иногда выдает сообщение в консоли:
"!> _UIA_GetControlTypeElement : элементы указанного типа не найдены"

При этом выскакивает окошко: "Не найдена вертикальная прокрутка".

Но если тут же совершить повторный запуск скрипта - то ошибок не выдает, только размещает рядом с курсором мышки - число "0".
На прокрутку до 50% - никак не реагирует.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Какой у вас Office? Версия, разрядность, локализация?
Попробуйте закрыть все копии Excel (убедитесь в диспетчере задач в отсутствии процесса Excel.exe) и просто запустите скрипт.
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
У меня Windows7 x64
Есть Эксель2003, Эксель2008, Эксель2013x64.

Открываю скрипт на Эксель2003 - пишет "Не найдена вертикальная прокрутка".
В консоли ошибка:
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному

Открываю скрипт на Эксель2008 - пишет "Не найдена вертикальная прокрутка"
В консоли ошибка:
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному

Открываю скрипт на Эксель2013х64 - в консоли ошибку не выдает.
Рядом с курсором появляется число "0", которое перемещается вместе с курсором.
При этом при перемещении бегунка прокрутки на 50% - ничего не происходит

(при этом - обязательно закрываю в диспетчере задач - все программы Эксель)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Попробовал в русском Excel 2013 х86 - нормально работает :scratch:
Ладно, пробуйте так
Код:
...
$oParent = _UIA_GetElementFromHandle(ControlGetHandle("[class:XLMAIN]", "", "NetUIHWND4"))
If @error Then Exit MsgBox(0, "", "Не найден элемент прокрутки")

$oScrollBar = _UIA_GetControlTypeElement($oParent, "UIA_ScrollBarControlTypeId", "")
If @error Then Exit MsgBox(0, "", "Не найдена вертикальная прокрутка")
...
Дополнительно, попробуйте запустить скрипт, как x64 (вызвать на файле меню, выбрать соответствующий пункт).
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
InnI , а вот сейчас - заработало.
Большое спасибо за помощь.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OlegSmirnov [?]
вот сейчас - заработало
OffTopic:
Ну, вот вы получили сообщение о том, что пользователь установил бегунок на позицию 50%. А дальше что? Я просто не могу понять, что делать с этой информацией? Как и куда её применить?
 
Автор
O

OlegSmirnov

Новичок
Сообщения
52
Репутация
0
InnI , я говорю, что ваш скрипт - у меня заработал.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OffTopic:
Вот и поговорили... как немой с глухим :smile:
 
Верх