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 ... 164, 165, 166 ... 172, 173, 174  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sat Jan 11, 2025 13:41    Post subject: Reply with quote

AkulaBig
Круто)) Еще бы пример вызова в шапке не помешал, на мой взгляд. А так, конечно, приятнее и понятнее стало смотреться.
Вы собираетесь секцию [DirMenu] тоже в поток прикручивать?
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sat Jan 11, 2025 13:52    Post subject: Reply with quote

Orion9 wrote:
AkulaBig
Круто)) Еще бы пример вызова в шапке не помешал, на мой взгляд

Вызов практически не изменился от вашего. Переменным только видимость сменил и увеличил их количество. Хотя сам вызов скрипта да, изменен:
Code:

Global script = %COMMANDER_PATH% & "\Scripts\ChangeLang.vbs"

RunThread ThreadWatchLang

Func ThreadWatchLang
   Local lng, cpu, mls, lng1, lng2, MainMenu
   Local ini = %COMMANDER_PATH% & "\Ini\User.ini"
   Local sect = "User"

   lng1 = AUTORUN_TCLANG
   While 1
      lng2 = AUTORUN_TCLANG
      If Not (lng1 = lng2) Then
         Switch lng2
            Case 'ENG'
               lng = "eng"
            Case 'RUS'
               lng = "rus"
         EndSwitch
         ShellExec /SW_HIDE /WAIT '%script%' '"%ini%" "%sect%" "%lng%"'
         CommandExec cm_ReloadBarIcons
         lng1 = lng2
      Else
         If AUTORUN_TCLANG = 'ENG' Then
            IniRead MainMenu %COMMANDER_INI% "Configuration" "Mainmenu"
               If MainMenu = "" Then
                  CommandExec em_changelng_mnu
            EndIf
         EndIf
      EndIf

Orion9 wrote:

Вы собираетесь секцию [DirMenu] тоже в поток прикручивать?

Вообще все многоязычное. Иначе не стал-бы время тратить на универсальность. Там ведь и колонки пользователя и названия wfx-плагинов (если это возможно). И т.д. Это ладно я еще не все фишки ТС использую.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sat Jan 11, 2025 16:36    Post subject: Reply with quote

AkulaBig wrote:
Вызов практически не изменился

Я имел в виду что-то вроде вот этого
 Hidden text

Предельное удобство в шапке с примером и параметрами ))
AkulaBig wrote:
Переменным только видимость сменил и увеличил их количество.

А проценты в заголовке оставили? А то ведь я без них жить не могу Laughing
AkulaBig wrote:
Вообще все многоязычное. Иначе не стал-бы время тратить на универсальность. Там ведь и колонки пользователя и названия wfx-плагинов

Ого, да вы серьезно решили развернуться. Может быть и получится - это надо пробовать. Но как я писал выше, команда, которая перечитывала бы всю конфигурацию ТС, как при его запуске, очень бы не помешала. А то без нее может и не получиться. Хотя названия wfx, по-моему, Тотал перечитывает без проблем.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sat Jan 11, 2025 17:23    Post subject: Reply with quote

Orion9 wrote:

Предельное удобство в шапке с примером и параметрами ))

А, вы имеете ввиду в шапке скрипта. Ну да, в AkelPad так оформляют скрипты. Удобно. Но тут не понятно, пример вызова скрипта отдельно привести или из Autorun? Видимо оба варианта надо.
Orion9 wrote:

А проценты в заголовке оставили? А то ведь я без них жить не могу Laughing

Вы имеете ввиду проценты задержки от загрузки процессора? Я их сразу переделал, но оставил:
Code:

      cpu = GetCPUUsage()
      If cpu < 60 Then
         mls = 500
      ElseIf cpu < 90 Then
         mls = 700
      Else
         mls = 1000
      EndIf
      # OutputDebugString("Autorun: mls = " & mls & " lng1 = " & lng1 & " lng2 = " & lng2)
      Sleep(mls)

Orion9 wrote:

Ого, да вы серьезно решили развернуться. Может быть и получится - это надо пробовать.

Дак если делать, то все.
Orion9 wrote:

команда, которая перечитывала бы всю конфигурацию ТС, как при его запуске, очень бы не помешала. А то без нее может и не получиться.

Да. Попробую предложить Гислеру. Еще лучше, если-бы он действительно сделал ТС многоязыковым.

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

К сожалению, это невозможно, извините. Просто перезапустите TC с помощью, например,
cm_exit 1
Laughing
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sat Jan 11, 2025 19:53    Post subject: Reply with quote

AkulaBig wrote:
К сожалению, это невозможно, извините. Просто перезапустите TC с помощью, например,
cm_exit 1
Laughing

Это был ответ Гислера что ли? Laughing
AkulaBig wrote:
Но тут не понятно, пример вызова скрипта отдельно привести или из Autorun? Видимо оба варианта надо.

Наверное, на ваше усмотрение. Все зависит от того, сколько времени и желания вы в это вложите ))
AkulaBig wrote:
Вы имеете ввиду проценты задержки от загрузки процессора?

Нет. Я имел в виду, что к вашему коду сейчас можно добавить буквально всего одну строчку перед Sleep, и весь поток заиграет другими красками Very Happy
Code:
 WinSetText(StartTitle & "  |  Memory: " & GetMemStats(0) & "%  CPU: " & cpu & "%")

Я писал об этом пару страниц назад, вы, наверное, пропустили?
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sat Jan 11, 2025 20:09    Post subject: Reply with quote

Orion9 wrote:

Это был ответ Гислера что ли? Laughing

Ну да. Причем еще от прошлого года. просили люди его уже об этом. Если интересно https://www.ghisler.ch/board/viewtopic.php?p=466665#p466665
Orion9 wrote:

Я писал об этом пару страниц назад, вы, наверное, пропустили?

Да, пропустил. Сейчас понял. Я вообще эту фишку видел в других сборках. Как-то мне не очень зашло. Попробую.
Дак мы с Хранителем Традиций в это время бурную переписку вели. Я и забыл даже вам ответить.
Заменил Memory на RAM Smile
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sat Jan 11, 2025 23:59    Post subject: Reply with quote

AkulaBig wrote:
Ну да. Причем еще от прошлого года. просили люди его уже об этом.

Ну я так и подумал Smile Знаменит он такими ответами: это невозможно, да то невозможно. Тут как-то в топике всплывало уже, что он когда-то говорил о невозможности изменения нижних функциональных кнопок, однако почему-то у меня сейчас на нижней кнопке выхода и левый клик висит, и правый, и клик с Ctrl, и двойной клик с Ctrl; да и сама кнопка называется не "Alt+F4 Выход", а "Autorun" - как и должна была называться с самого начала Mr. Green
AkulaBig wrote:
Если интересно

А оперативно вы "залили" вопрос на англоязычный форум, даже не ожидал Smile Смотрю там и Fla$her успел тоже отметиться - ну никак не хочет возвращаться домой, бродяга, уже даже ждать его устал Laughing
AkulaBig wrote:
Как-то мне не очень зашло. Попробую.

Ну, это вы напрасно. Я пока не посмотрю на проценты в заголовке, спать не ложусь! Mr. Green А если и ложусь, то уснуть не могу Mr. Green

Хорошо, если серьезно: вы можете туда не только датчики производительности вывести, но и другое что-то придумать, поток-то все-равно крутится, и фактически вхолостую. Можно, например, проверку какую-нибудь раз в полчаса делать или данные из au3-скрипта переодически вытягивать - здесь есть где развернуться фантазии.

А тем временем, я опробовал новую технику создания бар-файла и передачи из него параметров назад в Autorun через cm_ команду. Очень неплохо получилось, но есть один недостаток: команда прописывается в TOTALCMD.INC, поэтому придется самостоятельно следить за этим файлом при обновлении ТС. А если команда еще имеет и русскоязычное описание в WCMD_RUS.INC, то придется следить и за этим файлом.

Из плюсов: не нужно регистрировать кучу однотипных команд для соответствия каждому пункту меню или использовать внешние утилиты для вызова, типа TCFS2.

TOTALCMD.INC
Code:
[________Autorun_________]=0
cm_UwdxBarItem=70301;Uwdx Bar Menu


 Plugin.aucfg


 Functions.aucfg

Модули можно подключить к основной конфинурации директивой Pragma:

Pragma Include %COMMANDER_PATH%\Ini\Scripts\Plugin.aucfg
Pragma Include %COMMANDER_PATH%\Ini\Scripts\Functions.aucfg

 Кнопка

Кнопка открывает все установленные wdx-плагины в виде меню и отображает информацию по каждому плагину в утилите uwdx.При выборе плагина по умолчанию отображаются все непустые поля файла под курсором. Удержание CTRL - все поля. SHIFT - структура плагина. Если панель существует, при нажатии на кнопку она будет открыта сразу. CTRL - пересоздание панели. SHIFT - переход к файлу панели. Название файла панели и путь к утилите uwdx.exe нужно поменять в скрипте (у меня это %COMMANDER_PATH% & "\Plugins\uwdx).

В общем, получилась еще одна неплохая и полезная кнопка, как это и всегда бывает с плагином Autorun )
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sun Jan 12, 2025 00:39    Post subject: Reply with quote

Orion9 wrote:

Из плюсов: не нужно регистрировать кучу однотипных команд для соответствия каждому пункту меню

Дак это наоборот нововведение ТС 11.50. Теперь вместо недокументированной фичи, когда в totalcmd.ini с команды номер 60000 можно было прописывать пользовательские команды чтобы отобразить значок в меню, можно напрямую прописывать в пользовательской команде значок. При этом не надо отслеживать порядок команд, как через totalcmd.ini.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sun Jan 12, 2025 13:50    Post subject: Reply with quote

AkulaBig
Ты глянь, и правда можно Smile Но только если это wcmicons.dll или путь к ico-файлу, а я уж губу раскатал на что-то большее...) Но хоть так, и то уже лучше.

Но говоря о куче однотипных команд, я имел в виду другое. Самый большой недостаток вызова зарегистрированной комады по коду - в неё нельзя передать параметр, если вызов происходит из кнопки или пункта меню. Единственный способ передать параметр в таком случае - использовать внешний вызов с посылкой сообщения через PostMessage с указанием кода команды и одного числового параметра. Например, регистрируем команду с кодом 70300 и привязываем к нему функцию UwdxBar:
Code:
RegisterCommand 70300 "UwdxBar"

Func UwdxBar(lParam)   
   ShowHint(lParam)
EndFunc

Теперь, чтобы вызвать эту функцию из кнопки или пункта меню, достаточно просто указать код 70300:
Code:

TOTALCMD#BAR#DATA
70300

%COMMANDER_EXE%
Функция Autorun "UwdxBar"

1
-1

Но передать в нее параметр (lParam) таким образом не получится. Здесь нужен либо внешний вызов (например TCFS2.exe /ef "msg(1075, 70300, 55, 1)", где 55 - передаваемый параметр), либо регистрация номера команды в TOTALCMD.INC и присвоение ему имени, т.е.
Code:
[________Autorun_________]=0
cm_UwdxBar=70300;Uwdx Bar Menu

Тогда параметр можно передать кнопке:
Code:
TOTALCMD#BAR#DATA
cm_UwdxBar
55
%COMMANDER_EXE%
Функция Autorun "UwdxBar" (55)

1
-1

А теперь допустим мне нужно создать панель или (что еще хуже) меню из 55 пунктов. Как в таком случае передать параметр каждому пункту меню? Есть три варианта: (1) зарегистрировать заранее все номера с параметром, как я это делал раньше, например:
Code:
RegisterCommand 70110 "WdxMenuItem" 0
RegisterCommand 70111 "WdxMenuItem" 1
RegisterCommand 70112 "WdxMenuItem" 2
RegisterCommand 70113 "WdxMenuItem" 3
RegisterCommand 70114 "WdxMenuItem" 4
RegisterCommand 70115 "WdxMenuItem" 5
...
RegisterCommand 70165 "WdxMenuItem" 55

Каждой кнопке будет сопоставлен свой уникальный код. (Именно об этой куче команд я и говорил).

Второй вариант - посылка параметра через сообщение, т.е. в созданной панели у каждой кнопки будет вариация: TCFS2.exe /ef "msg(1075, 70300, 0, 1) - TCFS2.exe /ef "msg(1075, 70300, 55, 1).

И третий способ (который я и попробовал вчера) - прописка cm_ команды в TOTALCMD.INC - тогда у каждой кнопки будет вариация: cm_UwdxBar 1 - cm_UwdxBar 55. Как видите, у каждого способа есть свои плюсы и минусы.

P.S. Обнаружил, что в ТС х64 переключение ассоциаций с вызовом окна и прожатием кнопки не работает. Оказывается в 64-версии имя класса кнопок и номера их экземпляров отличаются, пришлось это учесть исправлением строки поиска кнопки на:
Code:
b = WinFind(h, (AUTORUN_TCARCH = 32 ? "TButton" : "Button"), (AUTORUN_TCARCH = 32 ? 3 : 2))

Сама функция при этом не изменилась:
 Hidden text
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sun Jan 12, 2025 14:41    Post subject: Reply with quote

Orion9 wrote:

Каждой кнопке будет сопоставлен свой уникальный код. (Именно об этой куче команд я и говорил).

Понятно.
Orion9 wrote:

P.S. Обнаружил, что в ТС х64 переключение ассоциаций с вызовом окна и прожатием кнопки не работает.

Потому что ТС х32 и ТС х64 написаны на разных языках. Изначальный, не очень удачный выбор языка программирования сейчас для Гислера является таким головняком. Но уже ничего не поменяешь.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sun Jan 12, 2025 17:28    Post subject: Reply with quote

AkulaBig
Тут пришла идея... Возможно, даже Гислер согласится такое сделать.

В общем, что если попросить его добавить еще одну переменную окружения типа COMMANDER_*, которая будет хранить информацию о текущем языке? Например: %COMMANDER_LANG% = WCMD_RUS.LNG

Тогда бы в цикле можно было проверять эту переменную, а не "дергать" ini-файл каждую секунду. И, кстати, каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sun Jan 12, 2025 18:02    Post subject: Reply with quote

Orion9 wrote:
не "дергать" ini-файл каждую секунду.

Вы имеете виду, что Autorun его дергает? Я вообще инишник не трогаю. Насчет дерганья это вообще такое неочевидное действие. Весь компьютер дергается от кварца. Все оконные процедуры. Та-же новая переменная тоже будет дергать.
Orion9 wrote:
каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.

Она и сейчас через Autorun имеет. А толку в этом, если инишник один на все копии.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 636

Post (Separately) Posted: Sun Jan 12, 2025 18:48    Post subject: Reply with quote

AkulaBig wrote:
А толку в этом, если инишник один на все копии.

Да, об этом я не подумал. Видимо, с этим ничего не поделаешь, если только Гислер не поменяет что-то. Но все-равно чтение переменной окружения, будь она доступна, выглядит, на мой взгляд, лучше, чем вызов макроса Autorun, который обращается каждый раз к ini-файлу, разве нет?
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 191

Post (Separately) Posted: Sun Jan 12, 2025 21:09    Post subject: Reply with quote

Orion9 wrote:
Но все-равно чтение переменной окружения, будь она доступна, выглядит, на мой взгляд, лучше, чем вызов макроса Autorun, который обращается каждый раз к ini-файлу, разве нет?

Скорей всего без разницы.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2684

Post (Separately) Posted: Mon Jan 13, 2025 11:58    Post subject: Reply with quote

Orion9 wrote:
Но только если это wcmicons.dll или путь к ico-файлу, а я уж губу раскатал на что-то большее..
Ещё, если это %COMMANDER_EXE% или имя программы без пути (Totalcmd.exe/TOTALCMD64.EXE). Планируется добавление shell32.dll и, возможно, imageres.dll.
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 ... 164, 165, 166 ... 172, 173, 174  Next
Page 165 of 174

 
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