Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 192, 193, 194, 195, 196  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Wed Jul 02, 2025 00:51    Post subject: Reply with quote

AkulaBig wrote:
Как все-таки правильно запись делать?

Если имеется в виду текст с COMMANDER_PATH, находящийся в переменной ini_Buttonbar (например, %COMMANDER_PATH%\buttonbar.bar), то нужно раскрыть его с помощью Set:

Code:

# применение Set в ФЗ - раскрытие переменных вида %var% в переданном тексте
ini_Buttonbar = Set(ini_Buttonbar)


Можно и прямо в функциях, конечно:

Code:

Local Buttonbar = IniRead("~/R", Set(ini_Buttonbar), "Buttonbar", "Buttonbar", "")

# в КЗ используем вычисляемую строку
IniRead /R Buttonbar %"Set(ini_Buttonbar)" "Buttonbar" "Buttonbar" ""
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Wed Jul 02, 2025 04:40    Post subject: Reply with quote

Loopback
Спасибо. То, что нужно. Единственное, что саму ini_Buttonbar я раскрыл:
Code:

Local ini_Buttonbar = IniGetSectionLocation(COMMANDER_INI, "Buttonbar")

А надо было раскрыть Buttonbar. Все получилось:
Code:

      Local Buttonbar = IniRead(ini_Buttonbar, "Buttonbar", "Buttonbar", "")
      SwitchIniSect(Set(Buttonbar), sect_Buttonbar, lng)
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Fri Jul 04, 2025 16:44    Post subject: Reply with quote

Orion9
Наконец-то я закончил переделку сборки на многоязычную. 2202 строки кода на Autorun. За время работы по переделки 2 новых плагина для ТС написал. Переделал две чужие программы для работы в плагинах ТС. Перекомпилировал все свои плагины для работы в ХР. Переделал файл настройки плагина TCMediaInfo. Смену языка все-же сделал без перезагрузки, хитрым образом сделав список пользовательских колонок. Все остальное перезагрузки не требует.
В общем огромный объем работы провел.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Mon Jul 07, 2025 15:43    Post subject: Reply with quote

Loopback
Вопрос возник. Сегодня тестил свою сборку под ХР на виртуалке. Autorun вроде-бы работает на ХР. Судя по тому, что один из плагинов к Autorun. Есть такой плагин NagScreen. На ТС64 он сработал, на ТС32 выдал ошибку. ХР 64 СП2.
А вот весь остальной код, написанный мной, не работает вообще. Ни одной функции.
Можете объяснить в чем дело?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Mon Jul 07, 2025 23:13    Post subject: Reply with quote

AkulaBig wrote:
Есть такой плагин NagScreen. На ТС64 он сработал, на ТС32 выдал ошибку.

Про плагин этот ничего не скажу, я его не писал.

AkulaBig wrote:
А вот весь остальной код, написанный мной, не работает вообще. Ни одной функции.
Можете объяснить в чем дело?

Нет, не могу. Я на XP регулярно запускаю, правда на 32-битной. До сих пор проблем не замечал. Вот сейчас запустил тестовую версию, навскидку всё нормально: переменные, вывод в заголовок, горячие клавиши, регистрация команд - всё работает, из последних тестов пример Orion9 с прогрессом тоже работает. MediaInfo ожидаемо не грузится, для XP нужны спецверсии dll.

Так что не очень понятно, что значит "весь". Не работать могут функции, для которых заявлена минимальная версия ОС > XP, но таких мало. Может что-то ещё не учёл, конечно, и оно не работает, но не всё же. Попробуйте потестировать, что-то отключить и начать с простейших функций.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Mon Jul 07, 2025 23:22    Post subject: Reply with quote

Loopback wrote:
MediaInfo ожидаемо не грузится, для XP нужны спецверсии dll.

Может быть она и ломает весь код?
Loopback wrote:
Попробуйте потестировать, что-то отключить и начать с простейших функций.

Для этого мне и надо было ваше разъяснение. Теперь мне понятно, что плагин ХР поддерживает.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Mon Jul 07, 2025 23:37    Post subject: Reply with quote

AkulaBig wrote:
Может быть она и ломает весь код?

Не похоже, её просто не может загрузить LoadLibrary.

AkulaBig wrote:
Теперь мне понятно, что плагин ХР поддерживает.

Поддерживает, хотя достаточно формально. При использовании функций я по возможности избегаю тех, которые Vista+, а если приходится использовать - использую динамическую линковку, иначе плагин просто бы не загружался. Но тестирую всё, конечно, очень поверхностно.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Tue Jul 08, 2025 06:30    Post subject: Reply with quote

Loopback wrote:
Не похоже, её просто не может загрузить LoadLibrary.

Разобрался. Именно в MI была проблема. Как только установил версию под ХР, все заработало.
Извиняюсь за офтоп. Первая часть вопроса для темы TCMediaInfo, но чтобы не разрывать смысл поста. Вы-же с MI много ковырялись. Есть-ли очень серьезные изменения между 21.03 с поддержкой ХР и последней? Насколько я помню, даже поддерживаемые расширения изменились?
Хочется оставить версию под ХР. Но похоже проще MI для ХР рядом в папочку положить и проверять версию Винды в Autorun?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Tue Jul 08, 2025 11:21    Post subject: Reply with quote

AkulaBig wrote:
Есть-ли очень серьезные изменения между 21.03 с поддержкой ХР и последней? Насколько я помню, даже поддерживаемые расширения изменились?

Проще всего посмотреть историю изменений. А уж важны ли эти изменения - каждый решает сам. Всё необходимое было и в более ранних версияx, но после была куча доработок и багфиксов. Каждый по отдельности вроде незначителен, но в совокупности очень немало.

Как бы ни было жаль, но XP мёртвая система. Я поддерживаю совместимость с ней, но это пока не было серьезной необходимости в новых функциях и не требует существенных трудозатрат.

AkulaBig wrote:
Но похоже проще MI для ХР рядом в папочку положить и проверять версию Винды в Autorun?

Я бы сделал именно так. Понятно, что лишний размер, но раз нужна XP - что поделать.

Ну или для XP просто не загружать библиотеку и поставить заглушку "не поддерживается", если её поддержка не очень критична.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Tue Jul 08, 2025 11:46    Post subject: Reply with quote

Loopback wrote:
если её поддержка не очень критична

Мне она нафиг не нужна, но тут пришлось все мои плагины перекомпилить под ХР по просьбе. Есть еще потребность.
Ну и мне тут мысль пришла. Раз Гислер даже Вин 98 поддерживает, плагинописателям тоже-бы надо следовать пути гуру. Хотя-бы ХР поддерживать.
Loopback wrote:
Я бы сделал именно так

Я решил все-же не тратить место просто так и при установке сделать вариант выбора компонентов. Так как не только MI требует других версий для ХР. Плюс еще есть компоненты, которые можно будет выбирать при установке. Сборка от этого распухнет, но это не так страшно.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Sat Jul 19, 2025 17:54    Post subject: Reply with quote

Как всегда не получается составить строку для использования DllCall:
Code:

Local TitleTabTC
DllCall("GetWindowTextW", "hwnd", AUTORUN_TCHANDLE, "wstr:768", @TitleTabTC, "int", 768, "int")

Заголовок ТС вывести удалось. Вот правильный код:
Code:

Static buf = Buffer(768)
DllCall("GetWindowText", "hwnd", AUTORUN_TCHANDLE, "ptr", buf.Ptr, "int", 768)
OutputDebugString(AUTORUN_TCHANDLE & " " & buf.GetStr())

Но возникла проблема с решением реальной задачи. Я хочу прочитать заголовок табов:
Code:

Local hTabLeft = SendMessage(AUTORUN_TCHANDLE, 1074, 5, 0)

hTabLeft содержит число. Как я думаю это хэндл окна. Но
Code:

Static buf = Buffer(768)
DllCall("GetWindowText", "hwnd", AUTORUN_TCHANDLE, "ptr", buf.Ptr, "int", 768)
OutputDebugString(hTabLeft & " " & buf.GetStr())

возвращает пустое значение.
Проверил в mvs, все стало ясно. У табов нет общего заголовка. В связи с этим возник вопрос.
Можно-ли как-то отследить режим показа колонок? Про SpecialView из wincmd.ini знаю. Только вот значения туда не пишутся в режиме реального времени.


Last edited by AkulaBig on Sat Jul 19, 2025 22:02; edited 2 times in total
Back to top
View user's profile Send private message
yahuu



Joined: 22 Jun 2023
Posts: 34

Post (Separately) Posted: Sat Jul 19, 2025 18:25    Post subject: Reply with quote

Можно ли добавить функцию двойного щелчка в SetHotkeyAction?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Sun Jul 20, 2025 21:34    Post subject: Reply with quote

AkulaBig wrote:
Вот правильный код

Можно и так, но первый тоже был правильный. Похоже, какой-то ещё баг.

AkulaBig wrote:
Можно-ли как-то отследить режим показа колонок?

Если имеется в виду номер выбранного режима просмотра (краткий, подробный, пользовательский), то можно, делал когда-то, но способ довольно кривой и громоздкий, через открытие контекстного меню с последующим его уничтожением. Сделано на основе идеи из TCFSTools.

 Hidden text


yahuu wrote:
Можно ли добавить функцию двойного щелчка в SetHotkeyAction?

Наверно имелось в виду ControlSetMouseAction? В любом случае, к сожалению, нет. Есть технические сложности.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Sun Jul 20, 2025 23:07    Post subject: Reply with quote

Loopback wrote:
но первый тоже был правильный

Не ожидал.
Loopback wrote:
Похоже, какой-то ещё баг.

Надо попробовать заменить "wstr:768" на "ptr".
Loopback wrote:
Если имеется в виду номер выбранного режима просмотра (краткий, подробный, пользовательский), то можно

Спасибо, потестю. Я тоже придумал решение. Можно с использованием cm_CopyHdrFileDetailsToClip попробовать. Мне достаточно отличать пользовательский режим отличать от всех других. Причем кажется уже даже не надо номер набора различать. Так что достаточно какой-нибудь уникальный хидер придумать. Но через контекстное меню тоже интересный вариант.

Добавлено спустя 12 минут:

Loopback
Попробовал вот так:
Code:

Local TitleTabTC
DllCall("GetWindowTextW", "hwnd", AUTORUN_TCHANDLE, "ptr", @TitleTabTC, "int", 768, "int")
OutputDebugString("Title TC " & TitleTabTC)

Выводит 0.

Добавлено спустя 10 минут:

Loopback wrote:
можно

Потестил. Отлично работает через кнопочку. Спасибо.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Mon Jul 21, 2025 13:02    Post subject: Reply with quote

AkulaBig wrote:
Не ожидал.

Так синтаксис же не из ниоткуда появился Smile То что не работает - это баг, регресс с версии 2.2.17.

AkulaBig wrote:
Попробовал вот так

А вот так неправильно. Вместо буфера с указанной третьим параметром длиной, который ожидает GetWindowText, будет передан нулевой указатель.

Синтаксис вида "wstr:768" специально был сделан для упрощения работы с простыми буферами, чтобы не приходилось каждый раз задействовать Buffer, т.к. огромное количество API-функций использует буфер для возврата значений. Аналогичный механизм сделан и в Autoit (там в DllCall безальтернативно выделяется 64К буфер для строчных типов), а в AHK необходимо предварительно задать ёмкость переменной.

Синтаксис переменной с @ применим только к значениям, переданным по ссылке: типы со * (например int*) и str/wstr (которые по сути char*/wchar*). Остальные типы никак не меняют значение переменной.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 192, 193, 194, 195, 196  Next
Page 193 of 196

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group