TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

Аватара пользователя
lz57005
Сообщения: 28
Зарегистрирован: Чт мар 05, 2020 09:47
Контактная информация:

Сообщение lz57005 »

Теперь вопрос: можно ли нажать кнопку в окне используя msg, sendmsg вместо того чтобы посылать нажатие клавиш через send?
В TCFS2.core.ini есть пример взаимодействия с выпадающим списком:

Код: Выделить всё

; Выбрать в выпадающем списке элемент, начинающийся с заданного текста. Параметры: текст, дескриптор окна, режим поиска (0 - точное совпадение, 1 - начало)
select=sendmsg(#2, $014E, sendmsg(#2, if(#3-0, $014C, $0158), 0, #1))
Предполагаю аналогичным образом можно взаимодействовать с любым контролом окна. Но непонятно как определить код самого сообщения.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Теоретически можно послать окну WM_COMMAND с идентификатором кнопки, и в классических окнах Windows идентификаторы зашиваются в ресурсы и, как правило, неизменны. Но на практике это весьма проблематично, т.к. тотал унаследовал от Delphi динамическое назначение идентификаторов оконных элементов.
Аватара пользователя
lz57005
Сообщения: 28
Зарегистрирован: Чт мар 05, 2020 09:47
Контактная информация:

Сообщение 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.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

ModalResult - это выдумка Delphi, с ними нельзя работать через Windows API.

Дескриптор кнопки найти можно, для этого есть функция findwnd. Искать можно по комбинации класса и текста (но в связи с тем, что у разных пользователей могут быть разные языки, по тексту окна в общем случае искать не очень надёжно) или по комбинации класса и порядкового номера кнопки в окне (но это не гарантирует результат, если надо пользоваться несколькими версиями тотала, т.к. в разных версиях номер кнопки может быть разный).

А потом найденной кнопке по идее можно послать какое-нибудь сообщение о нажатии кнопки или клике мыши.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

lz57005 писал(а):как завставить TC перечитать секцию Association в wincmd.ini
Может, здесь что-то полезное найдётся...
Аватара пользователя
lz57005
Сообщения: 28
Зарегистрирован: Чт мар 05, 2020 09:47
Контактная информация:

Сообщение lz57005 »

Возможно кому-то пригодится, решение с перечитыванием внутренних ассоциаций, пришлось упорно изучать логи сообщений в spy++ ))

Код: Выделить всё

TCFS2.exe /ef msg(147,0,1302100) msg(1045,0,0)
первое сообщение провоцирует перечитывание секции Associations
второе сообщение обновляет кэш иконок типов файлов
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

lz57005
Решение работает.
Визуально окно TC передёргивается довольно сильно при этом. Сопоставимо с вариантом /ef "tcm(519,1) eval(send_wait({enter},findwnd(TDlgCustomColors)))", несмотря на мелькающее в нём окно диалога.
Аватара пользователя
lz57005
Сообщения: 28
Зарегистрирован: Чт мар 05, 2020 09:47
Контактная информация:

Сообщение lz57005 »

sa
ну иначе никак, но факт отсутсвия кликания и окон радует, и, формально, если немного помучать spy++ подобный метод можно экстраполировать на кучу нереализованных в inc фичах, именно из-за этого после ночи в переводе dec hex я и словил предупреждение от авады))) очень хотелось поделится решением)))
Аватара пользователя
Avada
Сообщения: 10544
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

lz57005
...А сейчас вам придётся словить ещё одно предупреждение. Всё за те же заглавные буквы и точки (без них, в отличие от смайликов, тут обходиться не принято.) Категорически советую приучиться к порядку и не испытывать далее терпение модераторской команды.
Даже самая богатая фантазия
Не представит себе наши безобразия.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

lz57005 писал(а):первое сообщение провоцирует перечитывание секции Associations
Без этого сообщения что-то не так идёт?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А если добавить блокировку перерисовки окна, глаже станет?
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV
Субъективно, вариант с msg(1045,0,0) становится глаже - файловые панели меньше дёргаются, а вариант с tcm(519,1), наоборот, становится хуже: окно диалога по-прежнему мелькает, ещё и добавляется передёргивание панели инструментов, строки состояния и т.д, как в первом варианте.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV
В справке по команде tcini (или ini) написано "укажите просто # как value, чтобы вернуть значение ключа".
А не предвидится возможность, например, при указании `#`, возвращать строковое значение ключа?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Строковые значения вроде из функций сейчас в принципе нельзя возвращать, можно только форматировать строки для передачи куда-либо. Так что пока точно нет.
Аватара пользователя
jentoso
Сообщения: 446
Зарегистрирован: Чт дек 20, 2007 01:36

Сообщение jentoso »

MVV
Корректное изменение размера TMyListBox в настройке панели инструментов так и остается невозможным с 2019 года?
TC 11.58 combo, Windows 11 x64
Ответить