Autorun

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

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

AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Не сталкивался - чтобы стили меню отличались.
У меня Вин11. Может в этом дело. Вот цвета стандартного меню:
Изображение
Вот меню Избранных каталогов:
Изображение
Как видите, цвета совершенно разные и у фона и у выделения. И вот такого цвета меню от Autorun.
Orion9 писал(а): если, конечно, оно вам еще нужно, после успешного прикручивания MENUIMG.
Без промежуточного звена конечно поинтересней. К тому-же у TCIMG есть еще одно не очень приятное свойство и Андрей не может его устранить. Точка появления меню зависит от расположения курсора. Ну или других элементов. А стандартное меню привязано к левому нижнему углу кнопки. Ну и иконки плоские. Но все это и в меню Autorun и с этим ничего не поделать. Но у Андрея хоть цвета можно настроить и шрифт. Да вообще у него огромное количество настроек.
Orion9 писал(а): Попробуйте на vbs реализовать.
Я прочитал, что vbs не умеет ini, а значит там циклы будут. Поэтому даже ковырять не стал. Но если быстро разберусь с вашим примером, потестю.
Orion9 писал(а): Не знал о таком.
Я сам на днях это накопал. Когда занялся многоязычностью ТС.
Orion9 писал(а): А это будет работать при отключении оверлея в панелях опцией PopupOverlay=0?
Проверил, работает. Это-же не оверлейный значок. Обратите внимание, там затемненная галка "в виде меню" появляется при использовании расширения, в данном случае окончания команды .bar.
Orion9 писал(а): Да вроде работает, если сделать все то же самое, но через em_:

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

[em_my_command]
cmd=60011
param=
Я вообще проверял такое. Не работает. Но это без вызова WM_USER+51. Надо проверить. Тогда ведь скрипт au3 не нужен будет.
Orion9 писал(а): Но вы сами можете на au3 все реализовать, включая диалоговые окна, на крайний случай.
Ну это уж слишком жесткая плата за отказ от TCIMG. Утилька годная. В моем применении некоторая ее тормознутость значения не имеет. Конечно было-бы прикольно, если-бы Андрей разбил ее на модули. Наверняка, когда он ее делал, не думал, до каких размеров она вырастет.
Orion9 писал(а): Приведите код кнопки на TCIMG или напишите в двух словах, что нужно сделать
Я не хотел приводить, потому что вам понадобятся знания TCIMG. Но раз сами предложили, выкладываю :)

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

[em_userpanel]
cmd=%COMMANDER_PATH%\Utilities\TCIMG\TCIMG.exe
param=blist=[tc=AF-1f] slist=@%%COMMANDER_PATH%%\Bars\HORIZONTAL.BAR blist=%WL <IF> 0 <> <info=t50$GLOBALBLIST[1]|USER.BAR> = 1 <THEN> Exit()  <ELSE> barjn=$GLOBALSLIST+$GLOBALBLIST||"%P//1//USER.BAR"||delimbars<>||upd<> <ENDIF> tcprm=OPENBAR~~%P/USER.BAR plist=@"%P"USER.BAR infbx=Сообщение||Панель~~пользователя~~запущена@CRLF~~GLOBALPLIST<1>||2||300||50||-1||-1||1||SegoeUI||9
menu=Панель пользователя
Дело в том, что связно я сам не смогу объяснить задачу. Потому что кнопка делалась Abel. Но и он не до конца понял, что мне нужно и я ее доделывал сам. В общем я создаю Панель пользователя. Стандартно все делают панель, которая псевдо переключается с основной по нажатию кнопки. При этом все это г.., которое присутствует на ПП, отсылается другому пользователю. Мне так не надо. Поэтому у меня по нажатию на эту кнопку в текущей папке создается панель USER.BAR. Эта панель склеена из основной и пустой. На нее я накидываю свой мусор и он не передается другому пользователю в сборке. Когда мне надо, я запускаю эту панель и работаю с ней. Если очень коротко, мне нужен алгоритм склейки двух баров, который отсутствует в ТС. Кнопка собственно позволяет склеить любые две панели.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Да вроде работает
Работает! Как ракета. И никаких скриптов.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):У меня Вин11. Может в этом дело. Вот цвета стандартного меню:
Тоже Win11, но если бы вы не сказали, куда именно смотреть, я бы и не заметил.) Разница-то небольшая. Да, на ваших картинках она более ощутима, потому что оба меню можно увидеть сразу, но если запускать по одиночке, разницы почти не видно. По-моему, вы привередничаете.) Я думал, у вас правда там кислотные цвета или еще чего.
AkulaBig писал(а):Но у Андрея хоть цвета можно настроить и шрифт. Да вообще у него огромное количество настроек.
Ну, если так важно сохранить единый стиль, то почему бы и не воспользоваться.
AkulaBig писал(а):Я прочитал, что vbs не умеет ini, а значит там циклы будут.
Там по другому принципу замена секции идет - просто ищется текст в файле и меняется на новый. Но это должно работать быстрее, чем au3 и ahk, наверное.
AkulaBig писал(а):Я сам на днях это накопал. Когда занялся многоязычностью ТС.
Я посмотрю. От оверлейных значков отказался, потому что у меня слишком много панелей "в виде меню" на главной панели инструментов, и это выглядит не очень красиво. Но использовать такие значки выборочно - хотелось бы.
AkulaBig писал(а):Утилька годная.
Согласен. Каждый инструмент пригодится в хозяйстве. Если кувалдой не получается забивать мелкие гвозди, это не значит, что кувалда плохой и ненужный инструмент. Плохо бывает только, когда в хозяйстве одна кувалда.)
AkulaBig писал(а):Дело в том, что связно я сам не смогу объяснить задачу.
:lol:
AkulaBig писал(а):Если очень коротко, мне нужен алгоритм склейки двух баров, который отсутствует в ТС. Кнопка собственно позволяет склеить любые две панели.
Если поразмыслить, то теоретически можно сделать такое на Autorun, не смотря на то, что сейчас он не умеет работать с секциями (читать и писать секции в ini) и сохранять текстовые файлы на диск. Первое можно обойти, если сразу считать всё содержимое бар-файла в переменную через type, т.е.

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

ProcessExecGetOutput out %COMSPEC% '/c type "%bar%"'
Второе - через буфер (Autorun сейчас поддерживает буфер) и вызов vbs скрипта:

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

set objHTML = CreateObject("htmlfile")
ClipboardText = objHTML.ParentWindow.ClipboardData.GetData("text")
set objFSO = CreateObject("Scripting.FileSystemObject")   
set objFile = objFSO.OpenTextFile("clip.txt", 2, true)
objFile.WriteLine ClipboardText
objFile.Close
Содержимое второй панели нужно будет считать в переменную, потом обработать в цикле и заменить индекс у всех ключей (menu1, button1, cmd1 и т.д.), а затем доклеить к первой переменной и сохранить в новый бар-файл.
В принципе выполнимо, но мне кажется, на полноценном скриптовом языке (Autohotkey или AutoIt) такое реализовать было бы проще и удобнее, и скорость при этом не сильно бы потерялась, вероятно.
AkulaBig писал(а):Работает! Как ракета. И никаких скриптов.
Класс! :)
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):но если запускать по одиночке, разницы почти не видно.
Дак эти меню разного назначения и никак не ассоциируются друг с другом. А когда запускаешь два соседних меню и они разные, это не совсем правильно. Тем более они и так совершенно разные. Представление значков, место появления меню. Хотя-бы цвета должны совпадать.
Orion9 писал(а): Там по другому принципу замена секции идет - просто ищется текст в файле и меняется на новый. Но это должно работать быстрее, чем au3 и ahk, наверное.
Убойный алгоритм. Видимо так можно и в Autorun сделать. Надо думать. Сначала крякозябры шли. Потом понял, что файл должен быть в юникоде.
Orion9 писал(а): Но использовать такие значки выборочно - хотелось бы.
Дак пожалуйста. Поставите параметр, появится значок. Уберете параметр, исчезнет значок. Хотя на мой вкус все должно быть единообразно. Стрелка как-раз и помогает понять, что это меню.
Orion9 писал(а): Если поразмыслить, то теоретически можно сделать такое на Autorun
Пока и без этого полно дел. Понятно, что это написано на au3, значит можно повторить.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Что-то не совсем у меня получается с этим значком. Появится-то он появился, но только после того, как я вручную добавил к этой кнопке ключ iconic[N]=1 в файле главной панели. При этом, если добавить любой параметр к кнопке, то команда по коду (60011) не выполняется, а если использовать ключ PopupOverlay=0 (как у меня и было) в секции [Buttonbar] wincmd.ini, то этот значок вообще не появляется, как и устальных панелей "в виде меню".

Ну ладно, потом разберусь. И так что-то много времени потратил безрезультатно. Лучше в вашей сборке потом посмотрю, как сделано. Кстати, куда она пропала со страницы сборок на ру-борду? Решили сойти с дистанции? :lol:
AkulaBig писал(а):Убойный алгоритм.
Т.е. вы таки сделали vbs-скрипт? Ну как, скорость подросла? ))
AkulaBig писал(а):Стрелка как-раз и помогает понять, что это меню.
Ну, я-то для себя делаю, а мне все мои кнопки известны, как правило) Но в некоторых случаях значок не помешал бы и помог бы лучше ориентироваться.
AkulaBig писал(а):Пока и без этого полно дел. Понятно, что это написано на au3, значит можно повторить.
Пока, что говорится, задалось утро - новогодний бонус в студию! :lol:

[cut]

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

RegisterCommand 60013 "TwoBars"

Func TwoBars(lParam)
   
   Local b_Ctrl = IsPressed(0x11), b_Shift = IsPressed(0x10), b_Alt = IsPressed(0x12)
   
   Local bar = %COMMANDER_PATH% & "\Bars\Test.bar", _
         usr = %COMMANDER_PATH% & "\Bars\Auto_user.bar", def
         
   If b_Alt Then
      If b_Shift Then 
         CommandExec /CD:S %usr% 
      Else   
         CommandExec("em_open_user_panel")
      EndIf   
      Return
   EndIf
   
   ShowDarkHint("Объединение панелей", 0)
   
   Local aBar = List(), _
         aItems = List("cmd","param","button","menu","path","iconic"), _
         offset, out, b, i, j, k, old, new, found
   
   IniRead def %COMMANDER_INI% "Buttonbar" "Buttonbar" "%COMMANDER_PATH%\DEFAULT.BAR"   
   If StrPos(def, "%COMMANDER_PATH%") Then
      def = %COMMANDER_PATH% & StrReplace(def, "%COMMANDER_PATH%")
   Endif
   IniRead offset %def% "Buttonbar" "Buttoncount" 0      
   
   ProcessExecGetOutput def %COMSPEC% '/c type "%def%"'
   
   ProcessExecGetOutput out %COMSPEC% '/c type "%bar%"'
   IniRead b %bar% "Buttonbar" "Buttoncount" 0     
         
   aBar.Text = out
   #offset = 15
   For j = 0 To aBar.Count - 1
       found = false
       For i = 1 To b
           For k = 0 To aItems.Count - 1
              old = aItems[k] & i & "="
              new = aItems[k] & i + offset & "="       
              If StrPos(aBar[j], old) Then
                 aBar[j] = StrReplace(aBar[j], old, new)
                 found = true
                 break
              EndIf
           Next   
           if found then break
       Next
   Next
   aBar.Remove(0, 2)
   out = def & auCRLF & aBar.Text   
   Free(aBar)
   
   ClipPut(out)
   SaveClipToFile(usr)
   IniWrite %usr% "Buttonbar" "Buttoncount"  %"%offset%+%b%"
   ShowDarkHint("Панель создана", 0)
   
   If b_Ctrl Then CommandExec("em_open_user_panel")
   If b_Shift Then CommandExec /CD:S %usr%  
      
EndFunc

Func SaveClipToFile(Filename)
   Local vbsf = %COMMANDER_PATH% & "\Scripts\Vbs\Clip.vbs"
   Local vbsp = %COMMANDER_PATH% & "\Scripts\Vbs"
   ShellExec /SW_HIDE /WAIT:2000 %vbsf% '"%Filename%"' %vbsp%   
EndFunc

Func ShowDarkHint(DarkHint, HintSleep = 1000)

   SetHintParam("ShowHint", "Font", 10, "Arial")
   SetHintParam("ShowHint", "BackColor", 0x001C1C1C)
   SetHintParam("ShowHint", "Text", 0xFFFFFF)   
  
   ShowHint(DarkHint)
   
   If HintSleep > 0 Then 
      Sleep(HintSleep)
      WinSetState(23)
   Else
      Sleep(100)   
   Endif   
   SetHintParam("ShowHint", "Reload")
   
EndFunc
[/cut]
Кнопка слклеевает две панели (главную и любую другую) и опционально сразу загружает ее на главную панель или переходит к бар-файлу в каталоге. Имя главной панели берется из ключа Buttonbar одноименной секции wincmd.ini. Имя второй панели (Test.bar) нужно задать в скрипте. Имя и путь склееной панели (\Bars\Auto_user.bar) тоже можно изменить на другой. Клавиши-модификаторы: Ctrl - создать и загрузить, Shift - создать и перейти к файлу, Alt - загрузить существующую склееную панель, Alt+Shift - перейти к существующей пенели.
[cut]TOTALCMD#BAR#DATA
60013

wcmicons.dll
Объеденить панели|Ctrl - создать и загрузить|Shift - создать и перейти к файлу|Alt - загрузить существующую панель |Alt+Shift - перейти к существующей пенели.


60013
[/cut]
К usecmd.ini нужно добавить команду загрузки панели:

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

[em_open_user_panel]
cmd=OPENBAR1
param=%|COMMANDER_PATH|\Bars\Auto_user.bar
Для сохранения текста из буфера нужен будет скрипт Clip.vbs:

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

If WScript.Arguments.Count = 0 Then
   FileName = "Clip.txt"
Else 
   FileName = WScript.Arguments(0) 
End If

Set objHTML = CreateObject("htmlfile")
ClipboardText = objHTML.ParentWindow.ClipboardData.GetData("text")

Set objFSO = CreateObject("Scripting.FileSystemObject")   
Set objFile = objFSO.OpenTextFile(FileName, 2, true)
objFile.WriteLine ClipboardText
objFile.Close
Путь к vbs-скрипту указывается в скрипте Autorun.

P.S. Скорость неплохая, но если бы в Autorun можно было сразу читать и писать в файл (без промежуточных stdout и буфера), то было бы вообще шикарно!
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):AkulaBig
При этом, если добавить любой параметр к кнопке, то команда по коду (60011) не выполняется
А я вам сразу написал, что стрелочка появится если только прописать параметр. У меня %Z прописан, потому что он нужен MENUIMG, но можно любой. И при этом команды 60000 перестают выполняться в командах. Я вам не зря про PostMessage писал. Думал может из этого что-то выжать. Но нет. Я так и не понял, куда она команду посылает. Причем скрипт на au3 из справки (с этой-же командой) отрабатывает на ура.
Итог на нынешний день.
1. Если стрелка не нужна. Делаем через Autorun.
2. Если стрелка нужна, делаем через em_
Ну и через скрипт au3 работает.
Orion9 писал(а):если использовать ключ PopupOverlay=0 (как у меня и было) в секции [Buttonbar] wincmd.ini, то этот значок вообще не появляется, как и у остальных панелей "в виде меню".
Еще раз проверил. Стрелка есть. Но как выше написал, обязательно надо параметр прописать. От этого она зависит.
Orion9 писал(а):Лучше в вашей сборке потом посмотрю, как сделано. Кстати, куда она пропала со страницы сборок на ру-борду? Решили сойти с дистанции? :lol:
Уже давно. Там хейтеры начали письками меряться, у кого больше скачиваний на рутрекере. А меня это вообще не интересует. Я ценил, что сборки в тестированиях размещены. А сборку через тему моих плагинов скачать можно. Вот прямая ссылка https://www.dropbox.com/scl/fo/5rc2jdlm ... cz91s&dl=1
Orion9 писал(а):
AkulaBig писал(а):Убойный алгоритм.
Т.е. вы таки сделали vbs-скрипт?
Ну что вы. Я просто алгоритм посмотрел. Потом стал разбираться, можно-ли это сделать через сам Autorun. Понял, что нельзя. А так я только-только с кнопками разобрался. Вернее с одной кнопкой, где не требуется стрелочка. Да там еще код пришлось подправить. Мне-же две команды для переключения языков нужны. А там глючить кое-что стало.
Orion9 писал(а): Пока, что говорится, задалось утро - новогодний бонус в студию! :lol:
Спасибо! Мне-бы полгода на это понадобилось. Вот добью скрипт с меню Запуск и начну разбираться. Там все не просто. Ассоциации просто переключаются, а мне-же надо алгоритм переключения от языка придумать. И чтобы любое количество, а не два.
Orion9 писал(а): если бы в Autorun можно было сразу читать и писать в файл (без промежуточных stdout и буфера), то было бы вообще шикарно!
Очень этого не хватает. Тогда и меню Запуск можно было-бы обработать через Autorun.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а): И при этом команды 60000 перестают выполняться в командах. Я вам не зря про PostMessage писал. Думал может из этого что-то выжать.
Я наоборот подумал, что у вас все заработало и без посылки сообщения. Но, как вы говорите, "выжать" можно, только если оправить код команды окну ТС. Если использовать для этого TCFS2, то в usercmd.ini должна быть команда без параметра:

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

[em_mycommand.bar]
cmd=%COMMANDER_PATH%\Utilites\TCFS2\TCFS2.exe
param=
А сам параметр дожен быть в кнопке:

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

TOTALCMD#BAR#DATA
em_mycommand.bar
/ef "tcm(60011,1)"
wcmicons.dll


1
-1
Тогда значок появляется, но работает он только при PopupOverlay=1, что меня не совсем устраивает. Возможно, есть еще какая-то настройка, но лезть в документацию сейчас не хочется.
AkulaBig писал(а):у кого больше скачиваний на рутрекере.
И кто же победил? А то я как-то не в теме. Надеюсь, сборка с прикрученным браузером была? Куда же Тотал без браузера-то.)
AkulaBig писал(а):А меня это вообще не интересует. Я ценил, что сборки в тестированиях размещены.
Да, ваша сборка хорошо реализует эту концепцию (концепцию тестирования). Было бы хорошо, если бы вы туда еще файлов для тестов добавили, а то midi я еще могу найти, а вот трекерную музыку и файлы с ней...)
AkulaBig писал(а): А сборку через тему моих плагинов скачать можно.
Понял.
AkulaBig писал(а):Ну что вы. Я просто алгоритм посмотрел. Потом стал разбираться, можно-ли это сделать через сам Autorun. Понял, что нельзя.
Функции для работы с текстом в Autorun-то есть, включая замену, а вот с файлами - только костыли. В зависимости от сложности задачи можно попробовать сначала считать текстовый файл через "type", произвести замену StrReplace, а потом все сохранить через буфер. Может, что-то из этого и выйдет.
AkulaBig писал(а):Спасибо! Мне-бы полгода на это понадобилось.
Ну, где-то столько и мне понадобилось, чтобы комфортно себя чувствовать с Autorun. А как иначе? Мана ведь с небес сама не падает.)

Возможно, вам кажется, что полгода это большой срок, но если подумать на секунду и оглянуться: где вы были полгода назад и что за это время изменилось? А представьте, что за это время вы бы уже полностью освоили Autorun :lol: Жаль, что немногие пользователи (особенно из тех, кто может писать скрипты и делать свои сборки) знают, что из себя представляет сегодняшний Autorun. Это ведь инструмент мечты, который позволит делать с ТС практически все! И правда, многое они теряют из-за своего незнания.
AkulaBig писал(а):а мне-же надо алгоритм переключения от языка придумать. И чтобы любое количество, а не два.
Ох, не туда, мне кажется, вас заносит. Тут же явый косяк Гислера - переключение языковых файлов (WCMD_RUS.INC, WCMD_RUS.INI, WCMD_RUS.LNG, WCMD_RUS.MNU) он сделал отдельно, а про меню "запуск" забыл - с него и трясти надо (пользователю), вы-то тут причем? Сделайте, на крайняк, переключение языка для меню "запуск" отдельной кнопкой, да и дело с концом.

P.S. Всех с наступающим Новым Годом! :)
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Всех приветствую, давненько не заходил, нахожусь сейчас в своего рода отпуске и скорее всего так будет до конца праздников. Быстро пробегу по накопившимся вопросам.
Mrak_Tlen писал(а):А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю?
Нет, с чего бы.
Orion9 писал(а):Можно использовать объект List, как уже написали выше. Сейчас, наверное, это самый простой и лучший способ, особенное если использовать его свойство Text:
Да, это официально самый оптимальный способ :)
AkulaBig писал(а):А можно-ли плагином отследить например, переключение языка через стандартный диалог настройки?
Да, эту проблему и мне бы хотелось как-нибудь красиво решить, тут бы очень не помешало какое-нибудь событие, на которое можно было бы отреагировать.

Была мысль попробовать привязаться к факту изменения ini-файла, но вроде как файл сохраяется не при всех изменениях. Плюс отслеживать надо не только основной файл, но и переадресованные.
Orion9 писал(а): Хотя правильнее и интереснее, наверное, было бы, если бы К.Гислер сделал что-то наподобие секции Events
Да, был бы вполне вариант.
AkulaBig писал(а):Предлагается:
/EV- Отключает использование переменных и переменных окружения в тексте значения.
Да. Кажется, раньше Value назывался Text, поэтому было однозначно.
Orion9 писал(а):Вообще, надо спросить у Loopback, как реализован макрос AUTORUN_TCLANG. Если для его значения считывается ключ LanguageIni из wincmd.in
Банальное чтение ключа ini. И AUTORUN_TCLANGFILE делает то же самое, естественно.
AkulaBig писал(а):Получилась полная ж... даже без Autorun. В русской копии стала англоязычная ПИ А после закрытия ТС и нового запуска происходит запуск англоязычной версии.
Кстати, а ведь не так давно Гислер сделал замечательную вещь, когда при изменении панели в одной копии она автоматически меняется в другой. Расширить бы эту логику на изменение языка - и проблема решена.
AkulaBig писал(а):Можно-ли вас попросить реализовать функцию копирования секции ини-файла? Как-раз скорость ее работы для меня очень критична. А реализация через ahk достаточно медленная.
В следующей версии будет набор функций для работы с секциями, они уже готовы.
Orion9 писал(а):Это удивительно, как Гислер не сделал, чтобы панель открывалась в нужном месте по этой команде.
В принципе меню можно переместить после открытия с помощью оконных функций, вот тут рабочий код. Конечно, некоторое лишнее мелькание, но как вариант.
AkulaBig писал(а):Он совершенно не соответствует стандартному меню ТС. Совершенно другие цвета.
Насчет "совершенно другие" громко сказано, но действительно, у меня на Win10, у тотала цвет фона основного меню #F0F0F0, а меню Autorun и системных меню #F2F2F2.

Разница исчезающая, я на это даже внимания никогда не обращал. Почему различия в принципе могут быть - понятно, главное меню при включенных значках тотал отрисовывает сам. Если в настройках отключить значки меню, тотал отключает кастомную отрисовку и цвет главного меню будет такой же, как у системных меню и Autorun. Почему при отрисовке используется цвет, отличный от стандартных меню - не знаю.

Возможно, стоит попросить Гислера, чтобы он выровнял цвет меню по умолчанию с системными меню. Или, как вариант, дал возможность настраивать его цвет. Но думаю, со вторым вариантом он точно откажет, потому что это не будет работать в варианте без значков.

В любом случае я кастомную отрисовку меню делать не планирую.
AkulaBig писал(а):Название пользовательской команды с окончанием .bar и прописывание параметра (%Z использует MENUIMG, но можно любой) заставляет кнопку показывать стрелку.
Чудесный лайфхак! А то мне приходилось кастомный значок со стрелкой делать. Единственное что, это же недокументированная фича, сохранится ли она в будущем - неизвестно.
AkulaBig писал(а):Вот поэтому меня совершенно не устраивает числовое название команды в Autorun.
Числу можно сопоставить имя в файле TOTALCMD.INC. Чтобы работал хак с .bar, нужно, чтобы имя команды начиналось с cm_. Вот такая связка прекрасно сработала:

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

{Autorun.cfg}
RegisterCommand 60020 MyFunction

{TOTALCMD.INC}
cm_MyComand.bar=60020

TOTALCMD#BAR#DATA
cm_MyComand.bar
%Z
wciconex.dll


1
-1
Orion9 писал(а):но если бы в Autorun можно было сразу читать и писать в файл (без промежуточных stdout и буфера), то было бы вообще шикарно!
Всё будет, хотя не факт, что в ближайшей версии. Так уж получается, что работа с файлами оказалась едва ли не самой сложной частью.

-----

Всех также поздравляю с наступающим Новым Годом!
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Я наоборот подумал, что у вас все заработало и без посылки сообщения.
Заработало только без стрелки. А у меня пока кнопка без стрелки. Так что на данный момент устраивает, а при необходимости будем дальше разбираться.
Orion9 писал(а): Если использовать для этого TCFS2
Да ведь в справке есть все варианты решения этого вопроса. Через скрипт au3 вариант работает. Через TCFS2 я не пробовал, чтобы не устанавливать доп утильку. А вот через PostMessage почему-то не получилось. Ну да ладно, пока это не надо.
Orion9 писал(а): Тогда значок появляется, но работает он только при PopupOverlay=1, что меня не совсем устраивает.
Не пойму. Я-же скрин выкладывал и так писал. Если в параметрах кнопки прописать параметр, значок появляется навсегда. Или вы имеете ввиду, что вам обязательно надо было использовать команду Autorun?
Orion9 писал(а): И кто же победил?
Ожидаемо победили хейтеры. У них там админ земляк. Всех, кто не согласен, в бан :)
Orion9 писал(а): Было бы хорошо, если бы вы туда еще файлов для тестов добавили
Периодически выкладываю. Все хочу хорошую базу создать, да времени нет.
Orion9 писал(а): И правда, многое они теряют из-за своего незнания.
Ну я предпочитаю изучать на практике. Иначе невозможно на все время найти.
Orion9 писал(а): Тут же явый косяк Гислера
Да у него много разных косяков.
Orion9 писал(а): Сделайте, на крайняк, переключение языка для меню "запуск" отдельной кнопкой, да и дело с концом.
Не мой метод решения вопросов. Да и как-бы уже все работает. Просто попробую оптимизировать по скорости. Собственно уже потихоньку пишу скрипт, надеюсь в праздники закончу.
Orion9 писал(а): P.S. Всех с наступающим Новым Годом! :)
Да, и я вас и всех поздравляю с наступающим НГ!
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Привет! Рады вас видеть!

Успехов и развития в новом году!
Loopback писал(а):Банальное чтение ключа ini. И AUTORUN_TCLANGFILE делает то же самое, естественно.
Понятно. А чтение ini-файла, на ваш взгляд, каждую секунду в отдельном потоке подойдет в качестве решения, или все же это чрезмерные накладки?
Loopback писал(а):В следующей версии будет набор функций для работы с секциями, они уже готовы.
Здорово! Замечательное расширение функционала.
Loopback писал(а):В принципе меню можно переместить после открытия с помощью оконных функций, вот тут рабочий код. Конечно, некоторое лишнее мелькание, но как вариант.
Да, я видел этот код. Неплохое решение, но меня и ShowPopupMenu вполне пока устраивает. Но спасибо, что заодно объяснили, почему есть эта разница в отрисовке меню.
Loopback писал(а):Чудесный лайфхак! А то мне приходилось кастомный значок со стрелкой делать.
Именно что "хак". Работает все как-то непонятно. Вернее понятно, но не совсем так, как мне хотелось бы.))

Всё, что есть в документации - другого не нашел:
[cut="Russian.cedf"]PopupOverlay

Кнопки, открывающие другую панель инструментов в виде выпадающего меню, отображаются:
1 (по умолчанию): с добавлением небольшого оверлейного значка (квадратика со стрелочкой-треугольником);
0: в обычном виде, без оверлейного значка.

ПРИМЕЧАНИЯ:
Этот ключ общий для главной (горизонтальной) и вертикальной панелей инструментов.
Кнопка, указывающая на связанную панель инструментов, позволяет отобразить её вместо исходной панели или в виде выпадающего меню кнопки-переключателя, в зависимости от состояния опции "в виде меню" в настройках кнопки и ключа iconicN в исходном BAR-файле (у обычных кнопок функция ключа иная — см. описание ключа Buttonbar). Если включить в настройках указывающей на BAR-файл кнопки указанную опцию (по умолчанию она не отмечена), то щелчком мыши по этой кнопке (или клавишей ENTER при клавиатурной работе с главной панелью инструментов) содержимое соответствующего BAR-файла откроется как выпадающее меню кнопки, а щелчком мыши с удерживанием клавиши SHIFT (или клавишами SHIFT+ENTER при работе с клавиатуры) произойдёт обычное переключение на другую панель. Если опция в "виде меню" оставлена выключенной, то описанными способами выполняется альтернативное действие, а оверлейный значок у такой кнопки не отображается независимо от состояния ключа PopupOverlay.
Отображение другой панели в виде меню сопряжено с рядом особенностей. Например, в таком меню не работает перетаскивание, контекстное меню кнопки выводится без части команд ("Удалить", "Вырезать", "Копировать", "Вставить"), но с добавлением команды для правки открытой в меню панели инструментов, многострочная подсказка выглядит как одна строка без скрытия символа-разделителя, а при открытии контекстного меню кнопки или запуске назначенной ей команды выпадающее меню тут же закрывается.
При создании связанной панели через диалог "Настройка панели инструментов", первой по порядку в новой панели автоматически создаётся (с добавлением разделителя) кнопка для возврата в базовую панель (местоположение кнопки можно потом изменить). По такому же принципу работает утилита Button Bar Editor. При открытии в TC связанной панели в виде меню кнопка возврата, ссылающаяся на текущую панель (и только на неё!), автоматически скрывается, но остаётся видна во всех прочих случаях.
Размер оверлейного значка со стрелочкой-треугольником автоматически подстраивается под размер кнопок в текущей панели инструментов: при отображаемом размере кнопок по 23 пикселя включительно оверлейный значок мелкий, при размере 24x24 он увеличивается примерно вдвое, далее увеличение происходит при размере кнопок 40x40 и 64x64..
В вертикальной панели инструментов, если имеющиеся кнопки не вписываются полностью в отведённую высоту, нижняя часть содержимого панели перемещается в выпадающее меню, открываемое автоматически добавляемой в нижнюю часть панели кнопкой с направленной вниз стрелкой-треугольником (более крупным аналогом упомянутого выше оверлейного значка). Никакими настройками это поведение не управляется, дочерней панелью содержимое указанного меню на самом деле не является, хотя ни внешне, ни функционально это меню не отличается от тех, которые отображаются обычными кнопками для переключения панелей инструментов.
[/cut]
Думал, что может у меня из-за ТС 11.03 не так работает, но сейчас проверил на чистом 11.50 - результат тот же: пока вручную в бар-файле не пропишешь ключ iconicN=1, затененная галочка "в виде меню" не чекается и значок не появляется. Ну, а с ключом PopupOverlay=0, который полностю отключает оверлей, никакие значки вообще не появляются, включая "хакнутый".
Loopback писал(а):Числу можно сопоставить имя в файле TOTALCMD.INC.
Классно, что можно сопоставлять команды и давать им имена. Жаль только, что за этим придется следить при обновлении.
AkulaBig писал(а):Через TCFS2 я не пробовал, чтобы не устанавливать доп утильку.
Для таких задач я как раз предпочитаю TCFS2 - скорость выше и сама по себе утилита "нейтральна" (не нужно привязываться к скриптовому языку для отправки сообщений) и содержит большой набор других полезных функций.
AkulaBig писал(а):Не пойму. Я-же скрин выкладывал и так писал. Если в параметрах кнопки прописать параметр, значок появляется навсегда. Или вы имеете ввиду, что вам обязательно надо было использовать команду Autorun?
Выше я написал, как у меня работает. И выходит, что пока только так.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Всё, что есть в документации - другого не нашел:
Может быть вам мешает, что вы под этот хак пытаетесь подвести какую-то основу?
Я ведь совершенно случайно обнаружил такую опцию. Ну как случайно. Мне хотелось иметь стрелочку и я обратил внимание, что она появляется, когда прописываешь в поле команды .bar. Далее я решил проверить, а что будет, если начать команду с em_ Заработало. Далее я перезагрузил ТС и стрелочка исчезла. Попробовал прописать параметр в кнопке и стрелочка закрепилась навсегда. То-есть никакой документации, чистый эксперимент и логика мышления.
Orion9 писал(а): пока вручную в бар-файле не пропишешь ключ iconicN=1, затененная галочка "в виде меню" не чекается и значок не появляется. Ну, а с ключом PopupOverlay=0, который полностю отключает оверлей, никакие значки вообще не появляются, включая "хакнутый".
Удивительно, у меня работает без этого всего. Ну когда вернетесь домой, скачаете мою сборку и посмотрите. Я так понимаю, что пытаться тут что-то объяснить смысла нет. Надо на практике вам посмотреть.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Да, неплохой хак вы обнаружили, только жаль, мою проблему он решает.

Сборку скачал, попробовал - все то же самое. Но я, кажется, понял в чем проблема. У вас ключ PopupOverlay=0 в секции [Configuration] прописан, а он должен быть в секции [Buttonbar] для корректной работы. Мне следовало раньше это уточнить. А галка у вас сразу "чекалась", видимо, потому, что раньше на месте этих кнопок у вас реальные бар-файлы находились, потому что если создавать новую кнопку на панели (например, с командой em_usrcmd.bar и прочими), Тотал ничего сам чекать не будет.

Лучшим решение было бы, если Гислер сделал еще один ключ для бар-файлов, типа Overlay=1, или пошел еще дальше позволив пользователям самостоятельно указывать в этом ключе путь к файлу с оверлеем. Тогда было бы круто и открыло массу новых возможностей.

Попробовал перключение языков в вашей сборке - всё работает. Вы только не забудьте убрать или закомментировать строчку "OutputDebugString("lang=" & AUTORUN_TCLANG & " lng=" & lng)" - она просто информацию в системный отладчик выводит и по сути только ресурсы сейчас отьедает, хоть и минимальные. Можно, кстати, посмотреть через DebugView как каждую секунду появляется строчка от Autorun. Может быть, Loopback предложит какой-то более эффективный вариант без ежесекундного чтения ini, но главное, что у вас сейчас уже всё работает как и должно! :)
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):AkulaBig
У вас ключ PopupOverlay=0 в секции [Configuration] прописан, а он должен быть в секции [Buttonbar] для корректной работы.
Вот теперь и у меня стрелка не показывается. Разобрались с причиной.
Orion9 писал(а):AkulaBig
А галка у вас сразу "чекалась", видимо, потому, что раньше на месте этих кнопок у вас реальные бар-файлы находились, потому что если создавать новую кнопку на панели (например, с командой em_usrcmd.bar и прочими), Тотал ничего сам чекать не будет.
Точно так. Видите, совершенная случайность помогла выявить такой интересный хак.
Orion9 писал(а): Лучшим решение было бы, если Гислер сделал еще один ключ для бар-файлов, типа Overlay=1, или пошел еще дальше позволив пользователям самостоятельно указывать в этом ключе путь к файлу с оверлеем. Тогда было бы круто и открыло массу новых возможностей.
Его так трудно о чем-то просить. Обычный его ответ, что он не будет это делать, либо это невозможно сделать.
Orion9 писал(а):Можно, кстати, посмотреть через DebugView как каждую секунду появляется строчка от Autorun. Может быть, Loopback предложит какой-то более эффективный вариант без ежесекундного чтения ini, но главное, что у вас сейчас уже всё работает как и должно! :)
Что-то я не смог разобраться, как DebugView работает. Как его запускать, чтобы посмотреть работу Autorun?
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Вроде просто нужно запустить Dbgview.exe и все должно отображаться. Если только из пакета Sysinternals Suite драйвер нужно какой-то доустановить, как это иногда бывает при запуске некоторых утилит из этого пакета, но это маловероятно.

Кстати, забыл написать. Вы, конечно, красиво упростили au3-скрипт до нескольких строк, но ведь в таком виде, как сейчас, он будет затирать секцию [user], и все изменения сделанные в меню для одного языка пропадут при смене на другой. Или у вас пока все это только для тестов?
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):таком виде, как сейчас, он будет затирать секцию [user], и все изменения сделанные в меню для одного языка пропадут при смене на другой. Или у вас пока все это только для тестов?
Нет, не для тестов. Все работает. Ничего не затирает.
Ответить