Страница 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
Значит, причина залипания понята правильно.
Погоняй еще, если есть возможность, может, ещё что-то найдёшь, что стоит доработать.