Что нового

Передвижение определенного бегунка - в зависимости от названия над ним

OlegSmirnov

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

Имеется скрипт управления бегунками микшера громкости (для определенного бегунка - уровень сперва уменьшается до нуля, а затем вырастает на требуемую величину - в данном случае на 70%).

Однако здесь много неразберихи.
Бегунки имеют названия - "INSTANCE:3","INSTANCE:2","INSTANCE:1" и т.д.
То есть по названию не понять - звуком какой программы они управляют.

Как заставить скрипт реагировать не на название бегунка ("INSTANCE:3"), а на название той программы, которое вписано - над этим бегунком ("Soundtrack") ?
Блок с названием программы над бегунком - AutoitInfo определяет как "Class: Static".
Код:
Run('SndVol.exe')
$hWnd = WinWaitActive('[CLASS:#32770;TITLE:Микшер]')
$iVel = 70
$hSlider = ControlGetHandle($hWnd, '', '[CLASS:msctls_trackbar32;INSTANCE:3]') ;Двигает определенный бегунок
Sleep(1000)

ControlSend($hWnd, "", $hSlider, "{END}") ;0
Sleep(10)

ControlSend($hWnd, "", $hSlider, "{UP " & $iVel & "}") ;+$iVel
Sleep(10)


Sleep(1000)
WinClose($hWnd)
 

Вложения

  • скриншот.jpg
    скриншот.jpg
    40.9 КБ · Просмотры: 20

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
Run("SndVol.exe")
$hWnd = WinWaitActive("Микшер громкости", "", 3)

Global $i = 1, $hLabel, $hSlider, $sLabelText = "звуки"
Do
  $hLabel = ControlGetHandle($hWnd, "", "Static" & $i)
  If Not $hLabel Then ExitLoop
  If StringInStr(ControlGetText($hWnd, "", $hLabel), $sLabelText) Then
    $hSlider = ControlGetHandle($hWnd, "", "msctls_trackbar32" & ($i + 1) / 3)
    ExitLoop
  EndIf
  $i += 1
Until 0

If $hSlider Then
  ControlFocus($hWnd, "", $hSlider)
Else
  MsgBox(0, "Error", "Ошибка поиска " & $sLabelText)
EndIf
 

saraconor

Новичок
Сообщения
404
Репутация
3
А как можно ползунку сразу выдать нужное значение, вместо того чтобы спамить кнопку "вверх" ?
_guictrlslider_setpos не хочет работать :smile:
 

saraconor

Новичок
Сообщения
404
Репутация
3
InnI сказал(а):
saraconor [?]Код покажите где не работает.

Код:
#include <GuiSlider.au3>

Run("SndVol.exe")
$hWnd = WinWaitActive("Микшер громкости", "", 3)

Global $i = 1, $hLabel, $hSlider, $sLabelText = "AIMP"
Do
  $hLabel = ControlGetHandle($hWnd, "", "Static" & $i)
  If Not $hLabel Then ExitLoop
  If StringInStr(ControlGetText($hWnd, "", $hLabel), $sLabelText) Then
    $hSlider = ControlGetHandle($hWnd, "", "msctls_trackbar32" & ($i + 1) / 3)
    ExitLoop
  EndIf
  $i += 1
Until 0

If $hSlider Then
  _GUICtrlSlider_SetPos($hSlider,10)
Else
  MsgBox(0, "Error", "Ошибка поиска " & $sLabelText)
EndIf
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Проверил на Win7x64 - прекрасно работает
 

saraconor

Новичок
Сообщения
404
Репутация
3
Странно, у меня тоже Win 7 x64, работать не хочет.
3.3.8.1 версия
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
вынь 10 х64. код работает
 
Верх