Страница 66 из 130
Добавлено: Вт мар 12, 2013 11:48
sa
MVV писал(а):TCFS2 /ef "send(`%(){DOWN}{ENTER}`) + delay(100) + send(`{TAB 2} {ENTER}`)"
У меня успевает вызвать диалог изменения атрибутов и выдаёт ошибку
Код: Выделить всё
---------------------------
TCFS2
---------------------------
Error:
Invalid function call
Apply command:
+delay(100)+send(`{TAB 2} {ENTER}`)
---------------------------
ОК
Если /ef и далее записываю в кнопке в строке Параметры, то диалог совсем не вызывается, а ошибка выглядит так:
Код: Выделить всё
---------------------------
TCFS2
---------------------------
Error:
Invalid function call
Apply command:
{DOWN}{ENTER}`)+delay(100)+send(`{TAB 2} {ENTER}`)
---------------------------
ОК
---------------------------
Добавлено: Вт мар 12, 2013 12:42
MVV
А, блин, точно, просто так же плюс нельзя, надо всё выражение в
eval заключать:
Код: Выделить всё
TCFS2 /ef "eval(send(`%(){DOWN}{ENTER}`) + delay(100) + send(`{TAB 2} {ENTER}`))"
А в строке параметров
% надо удваивать.
Добавлено: Вт мар 12, 2013 13:19
sa
MVV писал(а):А в строке параметров % надо удваивать.
Спасибо, не учёл.
В выражении с
eval ошибка не выскакивает, но
send(`{TAB 2} {ENTER}`) передаётся уже не в окно диалога изменения атрибутов, которое остаётся открытым, а в окно TC.
Добавлено: Вт мар 12, 2013 13:49
Flasher
MVV писал(а):Не думаю, что AHK более 1 раза сверяет класс окна.
Тогда на кой нужны были бы резидентные скрипты, если бы они сверяли класс только раз?

Всё время сверяет.
MVV писал(а):но делать это перед отправкой каждого нажатия считаю излишним
Активировать и не надо, надо не разрешать выполнять нажатия, когда окно не активно.
MVV писал(а):если будет активно не окно тотала, нажатия получит неизвестно кто
Ты ж пишешь, что send не всё равно. А по этим словам, получается, что всё равно.
MVV писал(а):Добавление проверки активного класса для одной единственной функции.
А у нас других и нет пока. Но в нашем случае данное условие как раз необходимо.
MVV писал(а):какой его контрол (твоим языком говоря) имеет фокус, не могу.
Ничего, пусть будет только окно. Будем рассчитывать, что фокус мы устанавливаем нажатиями клавиш (в AHK можно и по контролам бегать).
MVV писал(а):И на данный момент все функции TCFS2 работают только с одни хэндлом окна - главного окна тотала.
На данный момент - понятно. Поэтому тут развитие потребуется для ровных срабатываний.
Добавлено: Вт мар 12, 2013 14:50
MVV
Тогда на кой нужны были бы резидентные скрипты, если бы они сверяли класс только раз? Всё время сверяет.
Один раз - имелось в виду, непосредственно перед очередным выполнением скрипта. Когда класс сверен и начато выполнение скрипта, вряд ли до окончания его выполнения будет следующая проверка.
Активировать и не надо, надо не разрешать выполнять нажатия, когда окно не активно.
Не вижу смысла. При активации из тотала (хоткеем или кнопкой тулбара) тотал все равно будет активным. А активировать такую команду, когда поверх тотала открыт модальный диалог, из тотала не получится всё равно. При активации по хоткею какого-нибудь менеджера хоткеев - неизвестно, какое окно будет активным (полезность команды станет нулевой). Так или иначе, работа будет выполняться именно с тоталом, следовательно, раз команда запущена, она должна что-то сделать.
Ты ж пишешь, что send не всё равно. А по этим словам, получается, что всё равно.
Для
send всё равно, кто получит нажатия. Не всё равно тому, кто
send вызывает.
(в AHK можно и по контролам бегать)
Думаю, она ко всем процессам подключает свой хук-модуль.
Поэтому тут развитие потребуется для ровных срабатываний.
Популярнее поясни, чего конкретно ты пытаешься добиться проверкой класса активного окна.
sa писал(а):send(`{TAB} {ENTER}`) передаётся уже не в окно диалога изменения атрибутов, которое остаётся открытым, а в окно TC.
Да, тут баг. Я думал, что при активации окна тотала (которая происходит при вызове второй
send) система активирует модальное окно, но она умудряется сделать активным окно тотала при открытом диалоге, в результате нажатия передаются ему. Нашел способ активировать именно модальное окно, если оно есть, проверяй.
Бета 334.
Добавлено: Вт мар 12, 2013 16:33
sa
MVV писал(а):проверяй
Так нормально.
Можно, наверное, и без
eval обойтись?
Код: Выделить всё
TCFS2 /ef "send(`%(){DOWN}{ENTER}`) delay(100) send(`{TAB 2} {ENTER}`)"
Добавлено: Вт мар 12, 2013 17:15
MVV
Кстати, действительно, можно и без
eval.

Добавлено: Вт мар 12, 2013 17:49
sa
Если диалог изменения атрибутов вызывать внутренней командой, то
send(`{TAB 2} {ENTER}`) передаётся опять же не в окно диалога, а в окно TC.
Код: Выделить всё
TCFS2 /ef "tcm(502) delay(100) send(`{TAB 2} {ENTER}`)"
С EM-командами, как будто всё нормально.
Добавлено: Вт мар 12, 2013 19:12
MVV
вызывать внутренней командой
Проблема в том, что
tcm не возвращает управление до закрытия диалога. Пробуй вызывать внутренние команды через
msg($433, 502, 0, 1), так будет работать. Зацени разницу:
Код: Выделить всё
TCFS2 /ef "msg($433, 501, 0, 0) send(`привет`)"
TCFS2 /ef "msg($433, 501, 0, 1) send(`привет`)"
Напоминаю,
msg($433, 501, 0, 0) и
tcm(501) работают абсолютно одинаково.
Исправил маленький косяк, из-за которого русские буквы не вводились на английской раскладке.
Бета 336.
Кстати, для ввода символа "`" можно использовать
send(`{~}`). А для переключения раскладки в тотале можно использовать
send(`%+()`) (для Alt+Shift, для Ctrl+Shift угадайте).
Добавлено: Вт мар 12, 2013 23:42
sa
MVV писал(а):Пробуй вызывать внутренние команды через msg($433, 502, 0, 1), так будет работать.
Да, это выход из положения. Спасибо за наводку.
MVV писал(а):А для переключения раскладки в тотале можно использовать send(`%+()`)
Мне оказалось удобнее завести в системе отдельные сочетания клавиш для переключения на русский и на английский языки ввода. Они срабатывают через send(`^+2`) и send(`^+1`).
Добавлено: Пн мар 18, 2013 14:34
sa
При использовании em-команды с параметрами последующие нажатия клавиш (с помощью send) передаются не в окно диалога, а в окно TC (уже после закрытия диалога). Обнаружил на примере с командой MultiRename.
Добавлено: Пн мар 18, 2013 17:13
MVV
Да, есть такое дело. Проблема в том, что EM-команды можно отправлять только через SendMessage (там передается сообщение WM_COPYDATA), следовательно, пока тотал не вернет мне управление, выполнив команду, я жду.
Получается, что чтобы загрузить шаблон и потом заполнить его, надо открывать MRT через msg($433, 2400, 0, 1), потом табулировать до раскрывающегося списка шаблонов... Мрак, конечно, если учесть, что шаблоны могут появиться и новые.
Возможно, прикручу опцию передачи сообщения в отдельном потоке. Вообще думаю добавить по необязательному параметру для tcm и tem, чтобы посылать в другом потоке.
Добавлено: Пн мар 18, 2013 17:33
sa
MVV писал(а):потом табулировать до раскрывающегося списка шаблонов..
Проще, наверное, создавать отдельную em-команду для нужного шаблона и вызывать её, затем передавая ей нажатия.
Добавлено: Пн мар 18, 2013 17:50
Flasher
MVV писал(а):Когда класс сверен и начато выполнение скрипта, вряд ли до окончания его выполнения будет следующая проверка.
Можно ставить проверку на отдельную часть, например, при каждом нажатии.
MVV писал(а):Для send всё равно, кто получит нажатия. Не всё равно тому, кто send вызывает.
Кто или что?
MVV писал(а):Популярнее поясни, чего конкретно ты пытаешься добиться проверкой класса активного окна.
Банально: чтобы не было ложных вызовов в других окнах.
Добавлено: Пн мар 18, 2013 19:31
MVV
Банально: чтобы не было ложных вызовов в других окнах.
Ну так активация окна решит эту проблему. Можно после активации проверить, что она произошла. А без активации - какой смысл? Кто будет вызывать команду, посылающую нажатия окну тотала, когда окно неактивно?