Страница 116 из 130
Добавлено: Ср ноя 23, 2016 13:59
Flasher
sa писал(а):Тогда при чём здесь тормознутые пути и вот это
При том же, при чём и:
MVV писал(а):Хотя, оно и без указания дескриптора окна работает...
sa писал(а):Просто вместо одной (3007) стала применяться другая (3009).
Поменялся выбор в угоду целесообразности. Ничего примечательного.
Добавлено: Ср ноя 23, 2016 14:13
MVV
Предлагаю закончить полемику и потестировать эту версию:
TCFS2 Beta 512
Здесь
явно указанный
0 в качестве дескриптора окна заменяется на
-1, чтобы отключить проверки окон в тех 100500 кнопках при сохранении
-1 в качестве основного выключателя проверок.
Добавлено: Ср ноя 23, 2016 14:30
Flasher
Порядок.
Этого всё жду. Поскорей бы.

Добавлено: Ср ноя 23, 2016 14:37
MVV
Ты про возможность установки фокуса из TCFS2? Через TCFS2Tools наверное будет не очень сложно.
Добавлено: Ср ноя 23, 2016 14:42
Flasher
Flasher писал(а):MVV писал(а):Для установки текста достаточно отправить окну сообщение, тут всё просто
Это "просто" очень бы пригодилось.
Добавлено: Ср ноя 23, 2016 15:01
sa
MVV
Как и предполагалось, в трёх случаях (0, -1 и без указания дескриптора) нажатия летят куда не надо, с указанием дескриптора – никуда не летят и вреда не наносят. Проверял, нажимая кнопки с TCFS2 на панели инструментов, заканчивающиеся на ENTER при нажатой на клавиатуре клавише ESC.
Без нажатой ESC все варианты работают, причём без ощутимых различий.
Добавлено: Ср ноя 23, 2016 16:23
MVV
sa,
Вообще, проверять надо вот какие моменты:
1. Без указания дескриптора ввод идёт в активное в момент начала ввода (момент начала работы функции send) окно, и при потере им фокуса ввод прекращается.
2. С явным указанием дескриптора 0 или -1 ввод идёт куда попало и может накрывать несколько окон, если фокус изменяется во время работы функции send.
3. При подаче валидного дескриптора окна через findwnd (окно должно существовать в момент вызова findwnd перед вызовом send) ввод идёт в указанное окно, если оно имеет фокус, и при потере им фокуса ввод прекращается.
4. При подаче инвалидного дескриптора окна через findwnd (окно с заданным классом не должно существовать) ввод вообще никуда не идёт (собственно, то, ради чего всё затевалось).
Flasher,
Так ты хочешь явно устанавливать текст окна, а не устанавливать фокус?
Добавлено: Ср ноя 23, 2016 16:41
Flasher
MVV
А можно как говорится в одном мультике "И того и другого, и можно без хлеба"?

Установка текста приоритетней, но бывает нужно и фокус перенести.
Добавлено: Ср ноя 23, 2016 16:44
sa
MVV
Я затевал ради пункта 3, когда обнаружил, что при указании валидного дескриптора ввод сначала идёт в указанное окно, если оно имеет фокус, а при потере им фокуса - куда попало.
Добавлено: Ср ноя 23, 2016 18:23
MVV
sa,
Что конкретно ты понимаешь под окном? Окно верхнего уровня (окно тотала, диалоговое окно и т.п.) или в том числе конкретные поля ввода? Функция send проверяет активность окон верхнего уровня, она не знает, какие поля ввода имеют фокус в чужом процессе. И если становится активным другое окно верхнего уровня, ввод сразу прекращается (в рамках одного вызова send, само собой).
Flasher,
Ты таким образом хочешь отдельные поля ввода так начинять текстом? Это ж ненадежно, т.к. у них нет неизменных идентификаторов...
Добавлено: Ср ноя 23, 2016 18:58
sa
MVV писал(а):собственно, то, ради чего всё затевалось
Пожалуй, ты всё же прав, неприятности могли возникать по пункту 4 в рамках нескольких вызовов send, хотя и для одного и того же окна.
Примеры:
/ef "tcm(506,1) eval(send_wait(`^{TAB}`, findwnd(`TINFODLG`))) delay(3000) send(`{ENTER}`, findwnd(`TINFODLG`))"
или
/ef "tcm(524) tcm(3311,1) eval(send_wait(@`>Последняя неделя`, findwnd(`TCOMBOINPUT`))) send(`{ENTER}`, findwnd(`TCOMBOINPUT`))"
Добавлено: Ср ноя 23, 2016 19:15
Flasher
MVV
Добавлять к классу индекс (например, отдельным параметром) же можно?
А ещё было бы хорошо добавить функцию по типу
EditPaste.
Добавлено: Ср ноя 23, 2016 20:05
MVV
Добавлять к классу индекс (например, отдельным параметром) же можно?
Роль этого индекса играет
zindex, но это всё равно костыль, т.к. в разных версиях тотала индексы могут быть разными.
А ещё было бы хорошо добавить функцию по типу EditPaste.
Стандартного способа вставить текст в середину поля ввода в обход буфера обмена нет... вообще, какой в этом может быть смысл с учётом того, что при активном поле ввода TCFS2 не запустишь, а при неактивном у него нет курсора?
Добавлено: Ср ноя 23, 2016 20:37
Flasher
MVV писал(а):но это всё равно костыль, т.к. в разных версиях тотала индексы могут быть разными.
Ты имеешь в виду, когда добавляются новые поля? Так это не проблема. Поправим с учётом нововведений. Ты же в TCFS2.ini эти номера добавлять не будешь. А других вариантов я не вижу.
MVV писал(а):какой в этом может быть смысл с учётом того, что при активном поле ввода TCFS2 не запустишь, а при неактивном у него нет курсора?
Комстрока - чем не поле ввода?
А то, что не курсора, - это разве проблема? Ждём окно, ставим курсор куда нам надо (в начало/конец, например) и делаем вставку.
Добавлено: Ср ноя 23, 2016 22:17
MVV
Ждём окно, ставим курсор куда нам надо (в начало/конец, например) и делаем вставку.
Это ведь можно сделать через Home/End и ввод уже сейчас. Но главное преимущество вставки в произвольные поля, полагаю, заключается в возможности изменять их содержимое без фокусировки?