1 (изменено: becauseim, 2015-10-12 15:52:01)

Тема: AHK: Переменное значение ControlClick


ControlClick, ToolbarWindow321, ahk_exe program.exe ahk_class Program.Class.Frame,, Left, , Click x100 y10 NA

Иногда, значение ToolbarWindow321 изменяется на ToolbarWindow325, вероятно, бывают и промежуточные значения (322,323). Пробовал перечислить в ряд возможные варианты данного условия:

ControlClick, ToolbarWindow321, ahk_exe program.exe ahk_class Program.Class.Frame,, Left, , Click x100 y10 NA
ControlClick, ToolbarWindow322, ahk_exe program.exe ahk_class Program.Class.Frame,, Left, , Click x100 y10 NA
ControlClick, ToolbarWindow323, ahk_exe program.exe ahk_class Program.Class.Frame,, Left, , Click x100 y10 NA
...

но сценарий срабатывает некорректно. Необходима проверка данного условия, т.е. нажимать по ToolbarWindow325 тогда, когда он заменил ToolbarWindow321.

2

Re: AHK: Переменное значение ControlClick

IfWinExist / IfWinNotExist Проверяет, существует ли указанное окно.

IfWinActive / IfWinNotActive Проверяет, существует ли указанное окно и является ли оно активным.

#IfWinActive / #IfWinNotActive /#IfWinExist /#IfWinNotExist [v1.0.41/42+] Создает контекстно-чувствительные горячие клавиши и строки автозамены.

3

Re: AHK: Переменное значение ControlClick

Уточнил для себя то, что когда целевой Control меняет свое название (его окончание), то его прежнее название приобретает другой Control. Т.е. если задать условие

IfWinExist, ToolbarWindow321, ahk_exe program.exe ahk_class Program.Class.Frame
ControlClick, ToolbarWindow321, ahk_exe program.exe ahk_class Program.Class.Frame,, Left, , Click x100 y10 NA

то клик происходит в любом случае, но по Control'у не в том окне, в котором это необходимо. Наверное, нужна какая-то проверка на то, какое название несет целевое окно в  текущий момент. Не знаю, насколько это возможно. Если что, то речь идет о панели инструментов окна предварительного просмотра в программе Vegas Pro.

4 (изменено: Alectric, 2015-10-19 13:15:42)

Re: AHK: Переменное значение ControlClick

Попробуй брать список крнтролов окна и выявить закономерность при его изменении, после этого задай нужные условия.
http://www.script-coding.com/AutoHotkey/WinGet.html

loop
{
WinGet, Var,Controllist, WinTitle
Tooltip,% var
Sleep,100
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

5

Re: AHK: Переменное значение ControlClick

Alectric, пожалуй, это то, что нужно в моем случае. А существуют ли примеры выявления закономерности изменения названия окна? Я лишь замечаю, что целевая панель инструментов меняет порядковое число тогда, когда перед ним появляется другое окно со своей панелью инструментов, т.е. название меняется в зависимости от порядка расположения окон. В данной программе сложно сохранить постоянный порядок расположения окон, т.к. некоторые из них имеют свойство открываться лишь временно.

6

Re: AHK: Переменное значение ControlClick

А существуют ли примеры выявления закономерности изменения названия окна?

Вряд ли можно выявить, много раз сталкивался.
А вот какие то признаки что это именно тот контрол почти всегда есть.
Положение, текст, AccInfo, размер, цвет и.т.п.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Переменное значение ControlClick

Зачем пытаться мудрить с автохотки, когда в вегасе наверняка можно это сделать с помощью джаваскрипт.

8 (изменено: Alectric, 2015-10-19 22:01:09)

Re: AHK: Переменное значение ControlClick

А существуют ли примеры выявления закономерности изменения названия окна?

Можно, например, если часть названия окна не изменяется или имеет похожую "структуру". Если-бы можно было-бы увидеть примеры названий этих окон... если, конечно, речь не о под-окнах (те которые внутри основного окна, с ними я не работал еще).

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9

Re: AHK: Переменное значение ControlClick

Положение, текст, AccInfo, размер, цвет и.т.п.

+ открыть спойлер

http://puu.sh/kQCQY/5868037270.pnghttp://puu.sh/kQD04/267939df28.png

Если есть инструменты для измерения остальных параметров, то, пожалуйста, подскажите.

Зачем пытаться мудрить с автохотки, когда в вегасе наверняка можно это сделать с помощью джаваскрипт.

Не встречал скрипта на включение/выключение Split Screen View. На тематических форумах скрипты фактически не обсуждаются.

если часть названия окна не изменяется

Название окна отлично от остальных, но панель инструментов этого окна имеет свойство называться так, как я описывал. Вот AccInfo окна:

+ открыть спойлер

http://puu.sh/kQDth/375961ad2a.png

если, конечно, речь не о под-окнах

Да, это своего рода встраиваемые окна внутрь основного, но имеющие свойство открепляться:

+ открыть спойлер

http://puu.sh/kQDEw/2126e5d1e0.png

10

Re: AHK: Переменное значение ControlClick

Вдогонку, есть соседняя кнопка на этой же панели инструментов, для вызова функций которой джава-скрипт выглядит так:

import Sony.Vegas; 

Vegas.Project.Preview.RenderQuality = Sony.Vegas.VideoRenderQuality.Best; 
Vegas.Project.Preview.FullSize = true; 
+ открыть спойлер

http://puu.sh/kQEhj/9778b4e270.png

Я, конечно, пробовал наугад что-то подобное:

import Sony.Vegas; 
Vegas.Project.Preview.SplitScreenView = true; 

но ничего не вышло.

11

Re: AHK: Переменное значение ControlClick

А наугад не надо.
Тут SDK:
http://www.sonycreativesoftware.com/download/devkits
Но этот параметр с его помощью не поменять.
Возможно поможет эта тема:
http://forum.script-coding.com/viewtopic.php?id=10570

12

Re: AHK: Переменное значение ControlClick

becauseim, контрол имеет имя "ToolbarWindow321"? Ну, допустим. А почему Вы используете ClassNN, а не ControlHwnd?

13 (изменено: becauseim, 2015-10-20 14:15:15)

Re: AHK: Переменное значение ControlClick

ypppu, да, в том случае, когда других окон с панелями инструментов не открыто, либо когда целевое окно с панелью инструментов закреплено в левой части общего окна программы, чего фактически не бывает, т.к. привычное положение в правом верхнем углу окна. Если же в окне программы открыты или закреплены дополнительные "подокна", имеющие панель инструментов, то имя целевого контрола меняется на "...322-325".

Использую контрол, который получил посредством записи действий в Macro Creator. Как более точно можно адресовать клик не знаю, т.к. пользователь весьма посредственный. Буду признателен подсказке.

14

Re: AHK: Переменное значение ControlClick

А почему Вы используете ClassNN, а не ControlHwnd?

А что нам это даст?
При каждом новом проекте он будет меняться, как и название ClassNN, как я понял.

15 (изменено: Alectric, 2015-10-20 15:50:37)

Re: AHK: Переменное значение ControlClick

Hwnd, по моему, меняется только при перезапуске программы... и при пересоздании окна...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

16

Re: AHK: Переменное значение ControlClick

При загрузки нового проекта в премьере окна пересоздаются.
Думаю у вегаса тоже, так как у премьера тоже постоянно меняются названия контролов.
Только в премьере еще acc ничего не определяет.

17 (изменено: Alectric, 2015-10-20 16:11:36)

Re: AHK: Переменное значение ControlClick

Возможно поможет функция GetElementByName(AccObj, name).

...

Нет ошибся, название самой кнопки тоже меняется...
Тогда такой вариант: после запуска программы указываем курсором на эту кнопку и запоминаем его hWnd и работаем до перезапуска.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

18 (изменено: Alectric, 2015-10-20 17:32:37)

Re: AHK: Переменное значение ControlClick

В общем полазил... попробуй использовать этот скрипт:

#include,%a_scriptdir%\Acc.ahk
#SingleInstance,Force

hwnd:=winexist("ahk_exe vegas120.exe") ; не забудь поменять на свой exe
Acc:=Acc_ObjectFromWindow(hwnd)

f3::
AccAdd:=GetElementByName(Acc,"Video Preview") ; и тут поменяй на то что Асс показывает у тебя
P:=Acc_Location(AccAdd)
mousemove,% p.x,% p.y
tooltip,% "x=" p.x "`ty=" p.y "`tw=" p.w "`th=" p.h
return

GetElementByName(AccObj, name) {
   if (AccObj.accName(0) = name)
      return AccObj

   for k, v in Acc_Children(AccObj)
      if IsObject(obj := GetElementByName(v, name))
         return obj
}

Не забудь положить со скриптом "Acc.ahk" библиотеку.

Если мышь будет всегда двигаться (кнопкой F3) туда где находится то под-окно, то, думаю, ты поймешь что с этим делать, т.к. ты, вроде, собирался использовать клики по координатам.
Также можно применить и к другим под-окнам, имеющим название в Acc.
Испытывал на "Vegas Pro Version 12.0 (Build 770) 64-bit".

PS Обрати внимание на комментарии.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

19 (изменено: serzh82saratov, 2015-10-20 18:45:26)

Re: AHK: Переменное значение ControlClick

У меня и по "простому" находит:


1::
    WinExist("ahk_class Vegas.Class.Frame ahk_exe vegas130.exe"), TB := "", Find := 0
    WinGet, List, ControlList
    Loop, Parse, List, `n
    {
        ControlGetText, Text, %A_LoopField%
        (InStr(A_LoopField, "Vegas.Class.Doc") && Text = "Video Preview" && (Find := 1))   
        If (Find && InStr(A_LoopField, "ToolbarWindow32") && (TB := A_LoopField))
            Break
    }
    ControlClick, % TB, , , , , x126 y15 NA
    Return

Уникальные текст и класс у контрола есть, тулбар всегда ему дочерний* , зачем заморачиватся...


* - Можно конечно добавить проверку через GetParent, если возможно отсутствие Toolbar в "окошке" Video Preview.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Переменное значение ControlClick

serzh82saratov, отлично работает! Было бы идеально, если также работало в "открепленном" режиме окна Video Preview.

если возможно отсутствие Toolbar в "окошке" Video Preview

Скрытие тулбара ради сохранения рабочего пространства - вторая причина, по которой завелся идеей получения сокращения для вызова функций из данной панели инструментов. На основе Вашего кода задал горячие клавиши на необходимые инструменты и скрыл панель.
Alectric, не пробовал Ваш вариант, т.к. его работа вызывает вопросы по приминению, а вариант от serzh82saratov отлично сработал.

21

Re: AHK: Переменное значение ControlClick

Потянуть за "точки".
http://puu.sh/kS4Bc/6ee2ed6375.jpg

22 (изменено: serzh82saratov, 2015-10-21 16:21:07)

Re: AHK: Переменное значение ControlClick

Было бы идеально, если также работало в "открепленном" режиме окна Video Preview.


1::
    TB := "", Find := 0
    If !(WinExist("Video Preview ahk_class Vegas.Class.Doc ahk_exe vegas130.exe") && (Find := 1))
        WinExist("ahk_class Vegas.Class.Frame ahk_exe vegas130.exe")
    WinGet, List, ControlList 
    Loop, Parse, List, `n
    {
        If (!Find && InStr(A_LoopField, "Vegas.Class.Doc"))
        {
            ControlGetText, Text, %A_LoopField%
            If (Text = "Video Preview" && (Find := 1))  
                Continue
        }
        If (Find && InStr(A_LoopField, "ToolbarWindow32") && (TB := A_LoopField))
            Break
    } 
    ControlClick, % TB, , , , , x136 y15 NA
    Return

Alectric, не пробовал Ваш вариант, т.к. его работа вызывает вопросы по приминению

У меня в 13 не работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui