Страница 70 из 130
Добавлено: Ср апр 03, 2013 21:39
sa
А я имел в виду такой вариант:
Код: Выделить всё
test_hello_1=send(`^m~(Hello, мир{tab} Это я%нHello{tab}Привет)`)
Пусть идеологически не совсем верный, но тоже работающий.
P.S.
Не сразу сообразил, что
^m и
^M совсем не одно и тоже.
Добавлено: Чт апр 04, 2013 16:55
MVV
Да, я в тестовой дотнетовской проге вчера это заметил. Но вчера я не понял, почему.
В моей раньше работало, т.к. регистр символов не учитывался при извлечении скан-кода, а теперь я зажимаю Shift, если надо. Так что по сути ^M - это Ctrl+Shift+m.
Думаю, уже скоро можно будет релизить, вроде всё работает. Дописываю пока Readme.
Добавлено: Чт апр 04, 2013 17:02
jentoso
MVV, хотел уточнить один момент. При использовании TCFS2 рядом должен находиться TCFS2.ini, а TCFS2Tools.ini обязательно или TCFS2Tools может использовать существующий TCFS2.ini?
Добавлено: Чт апр 04, 2013 17:11
sa
MVV писал(а):вроде всё работает.
Кавычку придётся через TCFS2.ini вводить?
Добавлено: Чт апр 04, 2013 17:49
MVV
jentoso,
И TCFS2, так и TCFS2Tools используют INI-файлы с такими же именами. Поэтому один INI-файл может быть только в случае, если переименовать TCFS2Tools.dll в TCFS2.dll. Но напомню, файл конфигурации TCFS2Tools необязателен (нужен лишь для переопределения стандартных номеров и названий команд).
sa,
Попробую для двойной кавычки добавить имя, чтобы отправлялась через фигурные скобки.
Добавлено: Чт апр 04, 2013 17:56
jentoso
MVV, спасибо за уточнение.
Добавлено: Чт апр 04, 2013 18:47
MVV
Разумеется, INI-файл TCFS2 должен лежать рядом с TCFS2, а INI-файл TCFS2Tools - рядом с модулем.
Бета 368.
Для двойной кавычки добавлена мнемоника
{DQ}.
Добавлено: Чт апр 04, 2013 18:59
jentoso
MVV писал(а):Разумеется, INI-файл TCFS2 должен лежать рядом с TCFS2, а INI-файл TCFS2Tools - рядом с модулем.
То что INI должен быть одноименным и лежать рядом, это было мне понятно. Было непонятно то, что надо ли использовать сразу эти INI файлы. Ведь при установке TCFS2, имеется INI файл, а в архиве TCFS2Tools, такого примера нет, а не опытному не понятно что именно в этом INI надо будет прописывать.
Добавлено: Чт апр 04, 2013 20:06
MVV
А неопытному там ничего и не надо прописывать.

В Readme написано, что файл нужен только для переопределения идентификаторов.
Добавлено: Пт апр 05, 2013 10:30
sa
Для двойной кавычки добавлена мнемоника {DQ}
Спасибо! Работает.
Попытался воспроизвести проблему, о которой раньше упомянул.
sa писал(а):Да уж, пока не догадался ввести delay - было страшновато.
Мне показалось, что она возникает, когда сообщение отправляется в фоновом потоке (неважно, после tcm или tem). Пример:
/ef "tcm(2400, -1) send(`%%н`)"
Если до send команда (2400) не успевает выполниться (нужен не шустрый компьютер), то после первого или второго вызова утилиты у меня происходит “залипание” клавиши Alt. Клавиша ESC после этого срабатывает как Alt+ESC, F7 как Alt+F7 и т.п. (лечится залипание нажатием самой же клавиши Alt). Ввод delay(200) перед send или указание окна в send устраняет проблему.
Добавлено: Пт апр 05, 2013 12:07
MVV
Возможно, это происходит оттого, что при появлении диалогового окна прежнее окно теряет фокус, посему
send прекращает отправку нажатий, не отправив отжатия Alt. Посмотрю, можно ли что-то сделать, чтобы всегда отжимать зажатые модификаторы.
Можешь добавить умное ожидание с поиском нужного окна. Если
findwnd вернула
0, окна еще нет. Организовать такой цикл сложно, но в принципе можно.
Макрос:
Код: Выделить всё
wait_for=if(#2<=0, 0, if (#1, 1, 0*delay(1000)+wait_for(#1, #2-1)))
Пример команды:
Код: Выделить всё
test_send_1=if(wait_for(findwnd(`TATTRIBDLG`), 5), send(`%иhello`), send(`sorry`))
Ожидает 5 секунд появления окна атрибутов. Если дождалась (для теста окно можно открыть вручную), в его поле даты/времени пишет
hello, иначе просто пишет
sorry.
Проблема макроса в том, что каждый оборот цикла является рекурсивным вызовом, что сильно ограничивает число итераций (не советую задавать более 100).
Добавлено: Пт апр 05, 2013 15:23
sa
MVV писал(а):умное ожидание с поиском нужного окна.
Спасибо, возможно пригодится.
Наблюдение за командой:
Код: Выделить всё
/ef "tcm(502, -1) if(wait_for(findwnd(`TATTRIBDLG`), 1), send(`~(%%иhello)`), send(`~(%%иsorry)`))"
Ожидание 2 и больше - hello, 1 – sorry (тоже в поле даты/времени), 0 – залипание Alt.
Та же команда, только tcm(502, 1).
Ожидание 1 и больше - hello, 0 – sorry (тоже в поле даты/времени).
Добавлено: Пт апр 05, 2013 15:57
MVV
У меня Alt не залипает при
-1 и
0 (проверяю, нажимая русскую букву, ожидая перехода к элементу окна с подчеркнутой этой буквой).
Пишет
sorry в поле ввода даты-времени. Это говорит лишь о том, что диалог появляется за тот малый интервал времени между поиском окна в
wait_for и поиском окна в
send. Но когда
send ищет окно, оно уже есть. Если окна ещё нет, тогда
send начинает посылать в окно тотала, а потом оно теряет фокус, и передача прекращается.
Бета 376.
Попробуй эту бету, здесь зажатые утилитой модификаторы отжимаются даже при прерывании передачи, включая внезапный конец строки и потерю окном фокуса. Т.е., Alt не должен залипать.
Добавлено: Пт апр 05, 2013 17:16
sa
Alt не должен залипать.
Не залипает!
Добавлено: Пт апр 05, 2013 17:24
MVV
Значит, причина залипания понята правильно.
Погоняй еще, если есть возможность, может, ещё что-то найдёшь, что стоит доработать.