Страница 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 года?