Страница 128 из 130
Добавлено: Чт ноя 19, 2020 15:32
lz57005
Теперь вопрос: можно ли нажать кнопку в окне используя msg, sendmsg вместо того чтобы посылать нажатие клавиш через send?
В TCFS2.core.ini есть пример взаимодействия с выпадающим списком:
Код: Выделить всё
; Выбрать в выпадающем списке элемент, начинающийся с заданного текста. Параметры: текст, дескриптор окна, режим поиска (0 - точное совпадение, 1 - начало)
select=sendmsg(#2, $014E, sendmsg(#2, if(#3-0, $014C, $0158), 0, #1))
Предполагаю аналогичным образом можно взаимодействовать с любым контролом окна. Но непонятно как определить код самого сообщения.
Добавлено: Пн ноя 23, 2020 11:49
MVV
Теоретически можно послать окну WM_COMMAND с идентификатором кнопки, и в классических окнах Windows идентификаторы зашиваются в ресурсы и, как правило, неизменны. Но на практике это весьма проблематично, т.к. тотал унаследовал от Delphi динамическое назначение идентификаторов оконных элементов.
Добавлено: Пн ноя 23, 2020 14:45
lz57005
Если рассмотреть конкретный пример?
Файл - Внутренние ассоциации (только в TC)...
TDlgCustomColors, Handle кнопки ОК при каждом запуске totalcmd.exe - разный. Класс TButton, Caption OK. Но эта кнопка имеет модальный результат 1.
Код: Выделить всё
object Button3: TButton
Tag = 4001
Left = 4
Top = 120
Width = 110
Height = 23
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 4
OnClick = Button3Click
end
Может возможно послать ModalResult 1, вместо нажатия ОК, если handle кнопки нельзя найти?
Ну или кто-нибудь знает как завставить TC перечитать секцию Association в wincmd.ini и повешать это действие на шорткат, чтобы клавиши модификаторы не мешали посылать TAB+SPACE или ENTER.
Добавлено: Ср ноя 25, 2020 10:50
MVV
ModalResult - это выдумка Delphi, с ними нельзя работать через Windows API.
Дескриптор кнопки найти можно, для этого есть функция findwnd. Искать можно по комбинации класса и текста (но в связи с тем, что у разных пользователей могут быть разные языки, по тексту окна в общем случае искать не очень надёжно) или по комбинации класса и порядкового номера кнопки в окне (но это не гарантирует результат, если надо пользоваться несколькими версиями тотала, т.к. в разных версиях номер кнопки может быть разный).
А потом найденной кнопке по идее можно послать какое-нибудь сообщение о нажатии кнопки или клике мыши.
Добавлено: Ср ноя 25, 2020 16:21
sa
lz57005 писал(а):как завставить TC перечитать секцию Association в wincmd.ini
Может,
здесь что-то полезное найдётся...
Добавлено: Пт апр 23, 2021 09:58
lz57005
Возможно кому-то пригодится, решение с перечитыванием внутренних ассоциаций, пришлось упорно изучать логи сообщений в spy++ ))
Код: Выделить всё
TCFS2.exe /ef msg(147,0,1302100) msg(1045,0,0)
первое сообщение провоцирует перечитывание секции Associations
второе сообщение обновляет кэш иконок типов файлов
Добавлено: Сб апр 24, 2021 11:15
sa
lz57005
Решение работает.
Визуально окно TC передёргивается довольно сильно при этом. Сопоставимо с вариантом /ef "tcm(519,1) eval(send_wait({enter},findwnd(TDlgCustomColors)))", несмотря на мелькающее в нём окно диалога.
Добавлено: Вс апр 25, 2021 11:31
lz57005
sa
ну иначе никак, но факт отсутсвия кликания и окон радует, и, формально, если немного помучать spy++ подобный метод можно экстраполировать на кучу нереализованных в inc фичах, именно из-за этого после ночи в переводе dec hex я и словил предупреждение от авады))) очень хотелось поделится решением)))
Добавлено: Вс апр 25, 2021 12:27
Avada
lz57005
...А сейчас вам придётся словить ещё одно предупреждение. Всё за те же заглавные буквы и точки (без них, в отличие от смайликов, тут обходиться не принято.) Категорически советую приучиться к порядку и не испытывать далее терпение модераторской команды.
Добавлено: Пн апр 26, 2021 10:52
sa
lz57005 писал(а):первое сообщение провоцирует перечитывание секции Associations
Без этого сообщения что-то не так идёт?
Добавлено: Сб май 01, 2021 18:44
MVV
А если добавить блокировку перерисовки окна, глаже станет?
Добавлено: Сб май 01, 2021 19:12
sa
MVV
Субъективно, вариант с msg(1045,0,0) становится глаже - файловые панели меньше дёргаются, а вариант с tcm(519,1), наоборот, становится хуже: окно диалога по-прежнему мелькает, ещё и добавляется передёргивание панели инструментов, строки состояния и т.д, как в первом варианте.
Добавлено: Вс апр 16, 2023 12:58
sa
MVV
В справке по команде tcini (или ini) написано "укажите просто # как value, чтобы вернуть значение ключа".
А не предвидится возможность, например, при указании `#`, возвращать строковое значение ключа?
Добавлено: Вс май 14, 2023 08:29
MVV
Строковые значения вроде из функций сейчас в принципе нельзя возвращать, можно только форматировать строки для передачи куда-либо. Так что пока точно нет.
Добавлено: Вт авг 22, 2023 17:46
jentoso
MVV
Корректное изменение размера TMyListBox в настройке панели инструментов так и остается невозможным
с 2019 года?