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 ... 171, 172, 173 ... 189, 190, 191  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: 1526

Post (Separately) Posted: Wed Feb 12, 2025 15:45    Post subject: Reply with quote

AkulaBig wrote:
А применение List() не решит проблему?

Не решит, потому что 32767 это не моё ограничение, а системных Ini-функций, которые, к слову, микрософтом еще тридцать лет назад были названы устаревшими. Чтобы его обойти, необходимо писать свою поддержку ini.

AkulaBig wrote:
А без командной записи никак.

AkulaBig wrote:
А хотелось-бы:

Как это никак? За исключением нескольких небольших исключений, любую функцию можно записать в функциональной записи.

Code:

Func SwitchIniSect(sIni, sSectSource, sSectTarget)
   Local SwitchSect = List()
   SwitchSect.Text = IniReadSection(sIni, sSectSource)
   IniWriteSection(sIni, sSectTarget, SwitchSect.Text)
EndFunc


Только зачем читать в список и потом из него обратно, если читаемый и записываемый блок совместим по формату и его можно писать без изменений. И поскольку IniRenameSection точно так же читает и записывает содержимое секции, это полностью равноценно:

Code:

Func SwitchIniSect(sIni, sSectSource, sSectTarget)
   IniRenameSection(sIni, sSectSource, sSectTarget)
EndFunc


AkulaBig wrote:
Хотелось-бы узнать, что это за команда.

Это загадочная магическая связка. По номерам сообщений нельзя достоверно сказать, что по факту она делает, не является ли то, что она делает побочным эффектом чего-то другого, и не создает ли она сама побочные эффекты.

147 = 0x93, в MSDN такого сообщения нет, изредка мелькает некая WM_UAHINITMENU, что вообще нерелевантно. Возможно, какие-то внутренние сообщения Delphi.

1045 = 0x415 - видимо, WM_USER + 0x15.

Понятно, что использование такого не от хорошей жизни, но...
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 332

Post (Separately) Posted: Wed Feb 12, 2025 16:36    Post subject: Reply with quote

Loopback wrote:
Не решит, потому что 32767 это не моё ограничение, а системных Ini-функций

А, ну все ясно. Я думал может вы какие-то свои ограничения накладываете.
Loopback wrote:
За исключением нескольких небольших исключений, любую функцию можно записать в функциональной записи.

Допускаю, что я не разобрался, но я не смог сделать вот такой вызов через функциональную запись:
Code:

Local ini_Buttonbar = %COMMANDER_PATH% & "\Ini\Buttonbar.ini"
Local sect_Buttonbar = "Buttonbar"
SwitchIniSect("%ini_Buttonbar%", %sect_Buttonbar% & %lng%, %sect_Buttonbar%)

Loopback wrote:
Это загадочная магическая связка. По номерам сообщений нельзя достоверно сказать, что по факту она делает

Вот и я не смог найти концов. Искал по TDlgCustomColors и вот такое вывалило в теме про TCFS2. И ведь без TCFS2 прекрасно работает. На оф форуме тоже не нашел. Это msg(147,0,1302100), вроде cm_ReloadBarIcons. По крайней мере взаимозаменяемо. А вот 1045 аналога не нашел. Вроде вызывается cm_InternalAssociate, но окно не появляется.

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

Code:

[quote="Loopback"]Func SwitchIniSect(sIni, sSectSource, sSectTarget)
   IniRenameSection(sIni, sSectSource, sSectTarget)
EndFunc[/quote]

Проверил. Думал я чего-то не понял. Но нет, все правильно я делаю. Речь не про ассоциации. У меня инишки сейчас состоят из таких секций:
Code:

[Buttonbar]

[Buttonbar_rus]

[Buttonbar_eng]

А в переспективе количество секций может быть любое. Поэтому тут другой алгоритм.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2688

Post (Separately) Posted: Wed Feb 12, 2025 17:29    Post subject: Reply with quote

AkulaBig wrote:
На оф форуме тоже не нашел.

Разве что эта тема перекликается в чём-то.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 775

Post (Separately) Posted: Wed Feb 12, 2025 17:44    Post subject: Reply with quote

sa wrote:
Первоначально на форуме здесь упоминалась...

Ну я так и подумал, что отловили ) Слышал о таком.

А теперь вопрос, и очень серьёзный: можно ли таким же способом отловить, какие сообщения стоят за пунктами меню, добавляемые в контекстное через внутренние ассоциации? Речь идет о:
Code:
Filter19=*.exe
Filter19_innoextract 1.9=**MultiArc
Filter19_Instal Explorer=**InstExpl
Filter19_Total Observer=**TotalObserver

Это удивительно, как Гислер не сделал команду открытия нужным плагином.

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

AkulaBig wrote:
А в переспективе количество секций может быть любое. Поэтому тут другой алгоритм.

Ничто вам не мешает и дальше использовать AutoIt-скрипт для этих целей, если возникают такие сложности. Имхо, а учитывая ограничения в 32К, оно даже будет и лучше.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 332

Post (Separately) Posted: Wed Feb 12, 2025 17:52    Post subject: Reply with quote

sa wrote:
Разве что эта тема перекликается в чём-то.

Судя по tcm(2958) скрипт не рабочий. У меня точно не рабочий, так как я пробовал cm_ReloadFileIcons. Не работает. Может у других работает.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 775

Post (Separately) Posted: Wed Feb 12, 2025 17:54    Post subject: Reply with quote

AkulaBig wrote:
Не работает. Может у других работает.

Пример в справке действительно не рабочий. Работает вот так:
Code:
Func SwitchInternalAssociations(lParam)
   Local Sections = List(), Mess, ini = %COMMANDER_PATH% & "\Ini\Associations.ini"
   Sections.Text = IniReadSectionNames(ini)
   If Sections.IndexOf('Associations') > -1 Then
      IniRenameSection(ini, 'Associations', '-Associations')
      Mess = 'ОТКЛЮЧЕНЫ!'
   ElseIf Sections.IndexOf('-Associations') > -1 Then
      IniRenameSection(ini, '-Associations', 'Associations')
      Mess = 'ВКЛЮЧЕНЫ!'
   Else
      Mess = 'ОТСУТСТВУЮТ!'
   EndIf
   Free(Sections)
   #SendMessage(AUTORUN_TCHANDLE, 147, 0, 1302100)
   #SendCommand(2958)
   SendMessage(AUTORUN_TCHANDLE, 1045, 0, 0)   
   ShowHint('Внутренние ассоциации ' & Mess, -1000, -1000, 1500, 1)
   WinAlign(LAST_HINT_WINDOW, 0, RequestInfo(3), 0)
EndFunc
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 332

Post (Separately) Posted: Wed Feb 12, 2025 18:12    Post subject: Reply with quote

Orion9 wrote:

Code:

   #SendMessage(AUTORUN_TCHANDLE, 147, 0, 1302100)
   #SendCommand(2958)
   SendMessage(AUTORUN_TCHANDLE, 1045, 0, 0) [/quote]



Спасибо, что подтведили. С #SendCommand(2958) не работает. Только не понимаю, почему вы закомментили #SendMessage(AUTORUN_TCHANDLE, 147, 0, 1302100) или cm_ReloadBarIcons. Без этого не обновляется состояние кнопки. Причем интересно, сначала почему-то мне требовалось два раза прописывать обновление кнопки. Иначе появлялось окно ассоциаций. Сейчас попробовал, одной команды достаточно.


Last edited by AkulaBig on Wed Feb 12, 2025 19:06; edited 1 time in total
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 775

Post (Separately) Posted: Wed Feb 12, 2025 18:17    Post subject: Reply with quote

AkulaBig wrote:
Без этого не обновляется состояние кнопки.

А у Flasher-a и нет кнопки в его примере, обновляться нечему Laughing
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 332

Post (Separately) Posted: Wed Feb 12, 2025 19:08    Post subject: Reply with quote

Orion9 wrote:
А у Flasher-a и нет кнопки в его примере, обновляться нечему

А при чем тут кнопка? SendCommand(2958) - это обновление значков. У него значки не обновляются.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Wed Feb 12, 2025 20:07    Post subject: Reply with quote

AkulaBig wrote:
но я не смог сделать вот такой вызов через функциональную запись:

Потому что первый параметр "%ini_Buttonbar%" - строка. В функцию так и передастся строка %ini_Buttonbar%. Нужно без кавычек:

Code:
SwitchIniSect(%ini_Buttonbar%, %sect_Buttonbar% & %lng%, %sect_Buttonbar%)


или, учитывая что это ФЗ, и % не нужны:

Code:
SwitchIniSect(ini_Buttonbar, sect_Buttonbar & lng, sect_Buttonbar)
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 332

Post (Separately) Posted: Wed Feb 12, 2025 23:51    Post subject: Reply with quote

Loopback
Отлично все работает с вашим синтаксисом. Спасибо за разъяснения.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 775

Post (Separately) Posted: Wed Feb 12, 2025 23:56    Post subject: Reply with quote

AkulaBig wrote:
Без этого не обновляется состояние кнопки.
AkulaBig wrote:
А при чем тут кнопка?

И действительно, причём тут кнопка? Laughing

Хотя теперь понял о чём речь. Действительно, SendCommand(2958) - команда обновления значков на панелях. Но в примере Flasher значки не обновляются. Как потом выяснилось, значки обновляются только посылкой сообщения с номером 1045, причём одного этого сообщения вполне достаточно. Возможно, раньше (т.е. в прошлых версиях ТС) эти две команды и требовались:
Code:
SendMessage(AUTORUN_TCHANDLE, 147, 0, 1302100)
SendCommand(2958)

Но сейчас от них никакого эффекта, если секция при старте ТС была отключена. Что касается посылки SendMessage(AUTORUN_TCHANDLE, 1045, 0, 0), то скорее всего, это и есть то самое "служебное" сообщение, которое сам Тотал и ловит при нажатии "OK" в своем же окне TDlgCustomColors. lz57005 выловил это сообщение, за что ему честь и хвала. Я это так примерно понимаю )

Loopback
А вот вам честь и хвала за функцию CRC32 в справке. У меня как раз недавно возникла потребность в этой функции, но думал, что подожду, пока вы не сделаете функции для работами с секциями, а уж потом спрошу. А тут такой приятный бонус Smile

Наверное, не мешало бы подвести какой-то итог по новому функционалу из последней версии, но я ещё не успел всё проверить и опробовать. Единственная проблема, с которой пока столкнулся - появление функции Opt. У меня были вот такие записи преобразования переменной окружения %COMMANDER_PATH%, считываемой из ini-файла:
Code:
   If StrPos(TCFS2, "%COMMANDER_PATH%") Then
      TCFS2 = %COMMANDER_PATH% & StrReplace(TCFS2, "%COMMANDER_PATH%")
   Endif

StrPos перестала работать как ранее, что привело к проблемам. Пришлось потратить немного времени, чтобы найти в чём причина. В итоге, пришлось сделать так:
Code:
   Opt("FuncExpandVars", 0)

   If StrPos(TCFS2, "%COMMANDER_PATH%") Then
      TCFS2 = %COMMANDER_PATH% & StrReplace(TCFS2, "%COMMANDER_PATH%")
   Endif
   
   Opt("FuncExpandVars", 1)   

Завтра планирую пройтись по всему остальному функционалу, посмотрим, что ещё всплывёт. А может, и ничего больше не всплывёт, очень на это надеюсь.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Thu Feb 13, 2025 00:20    Post subject: Reply with quote

Orion9 wrote:
StrPos перестала работать как ранее

Вообще-то не должна была. Opt это для решения одной проблемы, если не нужна была раньше - то и сейчас не должна быть нужна. Завтра посмотрю в чем разница, это скорее ошибка вследствие изменений.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 332

Post (Separately) Posted: Thu Feb 13, 2025 05:37    Post subject: Reply with quote

Orion9 wrote:
Opt("FuncExpandVars", 1)

Помните я у вас просил выложить мои инишники? Вот я в au3 применил Opt. Только результат ее работы меня удивил. Все переменные развернулись прямо в инишнике. А они у меня оказались в одном экземпляре. Страшная функция. Надеюсь здесь она не так работает.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1526

Post (Separately) Posted: Thu Feb 13, 2025 13:14    Post subject: Reply with quote

Orion9
А какое точное содержимое переменной TCFS2 до указанного кода и каков ожидаемый результат? Я не вижу разницы в поведении.

Orion9
По просьбе Flasher-а передаю некоторые комментарии по поводу ассоциаций.

 Hidden text


Но вообще, если эта тема актуальна и интересна, лучше вам как-то найти с Flasher-ом прямые каналы взаимодействия. Мне не хочется работать испорченным телефоном.
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 ... 171, 172, 173 ... 189, 190, 191  Next
Page 172 of 191

 
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