Страница 123 из 130
Добавлено: Чт янв 12, 2017 16:20
sa
MVV писал(а):В общем, главное, что работает.
А какой смысл искать первое попавшееся активное окно?
Добавлено: Чт янв 12, 2017 16:23
Flasher
Для отправки ему доп. команд после ожидания.
Добавлено: Вт янв 17, 2017 10:07
MVV
Между прочим, в виндах с 2000 по 10 комбобокс в диалоге выбора файла устроен одинаково (ComboBoxEx32 с ComboBox c Edit) и имеет один и тот же идентификатор ($47C), т.к. это не Delphi, поэтому его можно однозначно получать по этому идентификатору, если добавить в TCFS2 функцию GetDlgItem.
Добавлено: Вт янв 17, 2017 10:10
Flasher
А проблему с задержкой это решит?
Добавлено: Вт янв 17, 2017 11:33
MVV
Не решит, т.к. диалог сам устанавливает текст в поле ввода (но он в случае cm_LoadSelectionFromFile пуст). Нужно пытаться как-то уловить тот факт, что диалог уже готов (возможно, винда это делает до того, как делает диалог видимым - надо проверить).
Добавлено: Вт янв 17, 2017 12:07
Flasher
Надо. А то шило на мыло получается.
Добавлено: Вт янв 17, 2017 22:49
MVV
Добавил ещё одну запоздалую мелочь, облегчающую отладку и эксперименты - при запуске с ключом
/l все вызовы функций вместе с возвращаемыми значениями записываются в файл
%TEMP%\TCFS2.log.
TCFS2 Build 574:
+ параметр /l включает ведение журнала вызовов функций в файле %TEMP%\TCFS2.log
Добавлено: Пн дек 04, 2017 21:23
MVV
По логам всё одинаково выполняется, т.е. разница в том, чем TCFS2 не управляет. Стабильно картина повторяется? На первом никогда не срабатывает (10 из 10), на втором - всегда?
Что если добавить небольшую задержку (команду delay) перед посылом Enter?
По идее, если Ctrl и Shift зажаты во время посыла Enter, они и должны обработаться как единое сочетание, т.к. эмулятор нажатия клавиш просто нажимает клавишу Enter, которая дополняет уже нажатые. И разница приходит в голову только та же, что упоминал Flasher - что в одном случае по какой-то причине (например, задержка запуска из-за менее быстрого отклика системы) клавиши успевают оказаться отжатыми...
Добавлено: Пн дек 04, 2017 21:26
ingerard
MVV
Извиняюсь, поспешил сообщение удалить, помогает только если задержку 1 сек ставить. А это долго, хотелось бы быстрое срабатывание.
Без малейшей задержки ни разу не срабатывало, сколько не пробовал, а если поставить уже 50мс, то 1 через 5 может сработает.
Добавлено: Пн дек 04, 2017 23:50
MVV
Есть вариант: отправить сообщение BM_CLICK кнопке ОК (найти её как первую TButton в диалоге). Так зависимости от нажатых клавиш нет.
Добавлено: Вт дек 05, 2017 01:04
Flasher
Добавлено: Вт дек 05, 2017 18:42
Flasher
MVV
Имеет проблему settext_wait, если в текст попадают скобки.
И ещё. Ты не мог бы придумать для функции loop какой-нибудь счётчик/число итераций, а то и массив значений, чтобы их подставлять в перемунную?
Если грубо: loop(anyfunc(#1), 3) или loop([134,232,312], anyfunc(#1))
Если в loop это делать неудобно, то for как новая функция вполне подойдёт.
Добавлено: Чт дек 07, 2017 17:41
MVV
Сдаётся мне, что не только в скобках проблема, т.к. такое работает:
Код: Выделить всё
TCFS2 /ef "tcm(2032,1) delay(1000) eval(settext_wait(`C:\List (1).txt`, findwnd(Edit,,findwnd(ComboBox,,findwnd(#32770),0,1))))"
Код: Выделить всё
TCFS2 /ef "tcm(508,1) eval(settext_wait(`CopyTree:"C:\Folder (1).txt"`,findwnd(TAltEdit,,,0,1)))"
Ага, понял, проблему вызывает
несбалансированность скобок:
Код: Выделить всё
TCFS2 /ef "tcm(508,1) eval(settext_wait(`CopyTree:"C:\Folder 1).txt"`,findwnd(TAltEdit,,,0,1)))"
Хорошо впишется только новая функция, которая первым аргументом будет принимать выражение, а остальными - перебираемые значения:
foreach(anyfunc(#1), 134, 232, 312)...
Добавлено: Чт дек 07, 2017 22:33
Flasher
MVV писал(а):Ага, понял, проблему вызывает несбалансированность скобок:
Но почему же скобка внутри обратных апострофов не игнорируется?
MVV писал(а):Хорошо впишется только новая функция
Гуд. А вдобавок
for(anyfunc(#1), <end>, <begin - необ., 0 по умолчанию>) впишется?
Добавлено: Пт дек 08, 2017 12:25
MVV
Flasher писал(а):Но почему же скобка внутри обратных апострофов не игнорируется?
Это мне предстоит выяснить...
Flasher писал(а):Гуд. А вдобавок for(anyfunc(#1), <end>, <begin - необ., 0 по умолчанию>) впишется?
Не понял, что имеется в виду. Я говорил про функцию, которая принимает вычисляемое выражение и набор аргументов произвольной длины, в том числе в 1 или 2 элемента, а тут о чём речь?