3. Выполняем команду #1 и наблюдаем смену панели уже на 3-6 сек. (не 15!).
Судя по всему, срабатывает ещё незавершённая команда из шага 1, которая заканчивает ожидание. Ведь остановить ожидание нельзя. И прежде запущенная команда после ожидания не может узнать, она ли переключала на вторую панель.
#1 TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1) tem(em_1), test(tcini(TCFS2, Bar, #)) | set_tcini(TCFS2, Bar, 0) tem(em_2) delay(15000) tem(em_1)"
При беглом рассмотрении не понял, почему при
Bar != 0 туда пишется
1, а если равно
0, то
0, а не наоборот. И логичнее было бы писать в
Bar номер, совпадающий с номером юзер-команды.
ask-rus писал(а):Необходимо их объединить (усомнился в своих силах) и получить Открытие расширенной панели инструментов (em_2) с автоматическим возвратом на главную (em_1) через 15 сек с отменой (открытие главной и сброс отсчета времени, или без сброса по возможностям) одной командой.
Чтобы решить проблему, нужно сделать так:
Код: Выделить всё
[Items]
set_bar=set_tcini(TCFS2, Bar, 1) tem(em_bar1), test(#1 == 1) | set_tcini(TCFS2, Bar, 2) tem(em_bar2), test(#1 == 2) | set_tcini(TCFS2, Bar, 3) tem(em_bar3), test(#1 == 3) ; | ... создать блок для каждой панели
cmd1=set_tcini(TCFS2, Cmd1, #1) run_item(set_bar, 1), test(tcini(TCFS2, Bar, # != 1)) | set_tcini(TCFS2, Cmd1, #1) run_item(set_bar, 2) delay(15000) if(tcini(TCFS2, Cmd1, # == #1), run_item(set_bar, 1))
cmd1loader=run_item(cmd1, GetTickCount)
cmd2=set_tcini(TCFS2, Cmd1, 0) tem(em_1)
[Macros]
tt_GetTickCount=65573
GetTickCount=msg($433, tt_GetTickCount) ; Возвращает количество миллисекунд с момента загрузки Windows
При этом запускать команду
cmd1 необходимо с параметром
GetTickCount - этим мы укажем ей текущий номер сеанса. Можно сразу через
cmd1loader:
Команда, возвращающая GetTickCount, появляется в TCFS2Tools, начиная с версии 1.4.1.114 (чуть позже выложу).
Добавлено:
Эх, всё равно не работает, я и забыл, что подстановка параметров у меня ленивая. То есть, параметр не вычисляется при подстановке. Получается, что GetTickCount каждый раз вызывается по новой, и значения получаются разные. Похоже, для таких задач необходимо добавить псевдо-параметр, обозначающий идентификатор сеанса TCFS2 (банально значение GetTickCount в момент запуска программы) - так можно будет безошибочно различать сеансы.