Страница 165 из 243

Добавлено: Сб янв 11, 2025 12:41
Orion9
AkulaBig
Круто)) Еще бы пример вызова в шапке не помешал, на мой взгляд. А так, конечно, приятнее и понятнее стало смотреться.
Вы собираетесь секцию [DirMenu] тоже в поток прикручивать?

Добавлено: Сб янв 11, 2025 12:52
AkulaBig
Orion9 писал(а):AkulaBig
Круто)) Еще бы пример вызова в шапке не помешал, на мой взгляд
Вызов практически не изменился от вашего. Переменным только видимость сменил и увеличил их количество. Хотя сам вызов скрипта да, изменен:

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

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 писал(а):
Вы собираетесь секцию [DirMenu] тоже в поток прикручивать?
Вообще все многоязычное. Иначе не стал-бы время тратить на универсальность. Там ведь и колонки пользователя и названия wfx-плагинов (если это возможно). И т.д. Это ладно я еще не все фишки ТС использую.

Добавлено: Сб янв 11, 2025 15:36
Orion9
AkulaBig писал(а):Вызов практически не изменился
Я имел в виду что-то вроде вот этого
[cut]

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

; AHK v2
; originally posted by maestrith 
; https://autohotkey.com/board/topic/94083-ahk-11-font-and-color-dialogs/

; ===============================================================
; Example
; ===============================================================

; global cc, defColor
; cc := 0x00FF00 ; green
; defColor := [0xAA0000,0x00AA00,0x0000AA]

; oGui := Gui("-MinimizeBox -MaximizeBox","Choose Color")
; oGui.OnEvent("close",close_event)
; oGui.OnEvent("escape",close_event)
; oGui.AddButton("w150","Choose Color").OnEvent("click",choose_event)
; oGui.BackColor := cc
; oGui.Show("")
; return


; choose_event(ctl,info) {
    ; Global cc, defColor
    
    ; hwnd := ctl.gui.hwnd ; grab hwnd
    ; cc := "0x" ctl.gui.BackColor ; pre-select color from gui background (optional)
    
    ; cc := ColorSelect(cc,hwnd,&defColor,0) ; specifying start color, parent window, starting custom colors, and basic display
    
    ; If (cc = -1)
        ; return
    
    ; colorList := ""
    ; For k, v in defColor ; if user changes Custom Colors, they will be stored in defColor array
        ; If v
            ; colorList .= "Index: " k " / Color: " Format("0x{:06X}",v) "`r`n"
    
    ; ctl.gui.BackColor := cc ; set gui background color
    
    ; If cc
        ; msgbox "Output color: " cc "`r`n`r`nCustom colors saved:`r`n`r`n" Trim(colorList,"`r`n")
; }

; close_event(guiObj) {
    ; ExitApp
; }

; ===============================================================
; END Example
; ===============================================================

; =============================================================================================
; Parameters
; =============================================================================================
; Color           = Start color (0 = black) - Format = 0xRRGGBB
; hwnd            = Parent window
; custColorObj    = Array() to load/save custom colors, must be &VarRef
; disp            = 1=full / 0=basic ... full displays custom colors panel, basic does not
; =============================================================================================
; All params are optional.  With no hwnd the dialog will show at top left of screen.  Use an
; object serializer (like JSON) to save/load custom colors to/from disk.
; =============================================================================================

ColorSelect(Color := 0, hwnd := 0, &custColorObj := "",disp:=false) {
    Static p := A_PtrSize
    disp := disp ? 0x3 : 0x1 ; init disp / 0x3 = full panel / 0x1 = basic panel
    
    If (custColorObj.Length > 16)
        throw Error("Too many custom colors.  The maximum allowed values is 16.")
    
    Loop (16 - custColorObj.Length)
        custColorObj.Push(0) ; fill out custColorObj to 16 values
    
    CUSTOM := Buffer(16 * 4, 0) ; init custom colors obj
    CHOOSECOLOR := Buffer((p=4)?36:72,0) ; init dialog
    
    If (IsObject(custColorObj)) {
        Loop 16 {
            custColor := RGB_BGR(custColorObj[A_Index])
            NumPut "UInt", custColor, CUSTOM, (A_Index-1) * 4
        }
    }
    
    NumPut "UInt", CHOOSECOLOR.size, CHOOSECOLOR, 0             ; lStructSize
    NumPut "UPtr", hwnd,             CHOOSECOLOR, p             ; hwndOwner
    NumPut "UInt", RGB_BGR(color),   CHOOSECOLOR, 3 * p         ; rgbResult
    NumPut "UPtr", CUSTOM.ptr,       CHOOSECOLOR, 4 * p         ; lpCustColors
    NumPut "UInt", disp,             CHOOSECOLOR, 5 * p         ; Flags
    
    if !DllCall("comdlg32\ChooseColor", "UPtr", CHOOSECOLOR.ptr, "UInt")
        return -1
    
    custColorObj := []
    Loop 16 {
        newCustCol := NumGet(CUSTOM, (A_Index-1) * 4, "UInt")
        custColorObj.InsertAt(A_Index, RGB_BGR(newCustCol))
    }
    
    Color := NumGet(CHOOSECOLOR, 3 * A_PtrSize, "UInt")
    return Format("0x{:06X}",RGB_BGR(color))
    
    RGB_BGR(c) {
        return ((c & 0xFF) << 16 | c & 0xFF00 | c >> 16)
    }
}

; typedef struct tagCHOOSECOLORW {  offset      size    (x86/x64)
  ; DWORD        lStructSize;       |0      |   4
  ; HWND         hwndOwner;         |4 / 8  |   8 /16
  ; HWND         hInstance;         |8 /16  |   12/24
  ; COLORREF     rgbResult;         |12/24  |   16/28
  ; COLORREF     *lpCustColors;     |16/28  |   20/32
  ; DWORD        Flags;             |20/32  |   24/36
  ; LPARAM       lCustData;         |24/40  |   28/48 <-- padding for x64
  ; LPCCHOOKPROC lpfnHook;          |28/48  |   32/56
  ; LPCWSTR      lpTemplateName;    |32/56  |   36/64
  ; LPEDITMENU   lpEditInfo;        |36/64  |   40/72
; } CHOOSECOLORW, *LPCHOOSECOLORW;
[/cut]
Предельное удобство в шапке с примером и параметрами ))
AkulaBig писал(а):Переменным только видимость сменил и увеличил их количество.
А проценты в заголовке оставили? А то ведь я без них жить не могу :lol:
AkulaBig писал(а):Вообще все многоязычное. Иначе не стал-бы время тратить на универсальность. Там ведь и колонки пользователя и названия wfx-плагинов
Ого, да вы серьезно решили развернуться. Может быть и получится - это надо пробовать. Но как я писал выше, команда, которая перечитывала бы всю конфигурацию ТС, как при его запуске, очень бы не помешала. А то без нее может и не получиться. Хотя названия wfx, по-моему, Тотал перечитывает без проблем.

Добавлено: Сб янв 11, 2025 17:27
AkulaBig
Orion9 писал(а): Предельное удобство в шапке с примером и параметрами ))
А, вы имеете ввиду в шапке скрипта. Ну да, в AkelPad так оформляют скрипты. Удобно. Но тут не понятно, пример вызова скрипта отдельно привести или из Autorun? Видимо оба варианта надо.
Orion9 писал(а): А проценты в заголовке оставили? А то ведь я без них жить не могу :lol:
Вы имеете ввиду проценты задержки от загрузки процессора? Я их сразу переделал, но оставил:

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

		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 писал(а): Ого, да вы серьезно решили развернуться. Может быть и получится - это надо пробовать.
Дак если делать, то все.
Orion9 писал(а): команда, которая перечитывала бы всю конфигурацию ТС, как при его запуске, очень бы не помешала. А то без нее может и не получиться.
Да. Попробую предложить Гислеру. Еще лучше, если-бы он действительно сделал ТС многоязыковым.

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

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

Добавлено: Сб янв 11, 2025 18:53
Orion9
AkulaBig писал(а):К сожалению, это невозможно, извините. Просто перезапустите TC с помощью, например,
cm_exit 1
:lol:
Это был ответ Гислера что ли? :lol:
AkulaBig писал(а):Но тут не понятно, пример вызова скрипта отдельно привести или из Autorun? Видимо оба варианта надо.
Наверное, на ваше усмотрение. Все зависит от того, сколько времени и желания вы в это вложите ))
AkulaBig писал(а):Вы имеете ввиду проценты задержки от загрузки процессора?
Нет. Я имел в виду, что к вашему коду сейчас можно добавить буквально всего одну строчку перед Sleep, и весь поток заиграет другими красками :D

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

 WinSetText(StartTitle & "  |  Memory: " & GetMemStats(0) & "%  CPU: " & cpu & "%") 
Я писал об этом пару страниц назад, вы, наверное, пропустили?

Добавлено: Сб янв 11, 2025 19:09
AkulaBig
Orion9 писал(а): Это был ответ Гислера что ли? :lol:
Ну да. Причем еще от прошлого года. просили люди его уже об этом. Если интересно https://www.ghisler.ch/board/viewtopic. ... 65#p466665
Orion9 писал(а): Я писал об этом пару страниц назад, вы, наверное, пропустили?
Да, пропустил. Сейчас понял. Я вообще эту фишку видел в других сборках. Как-то мне не очень зашло. Попробую.
Дак мы с Хранителем Традиций в это время бурную переписку вели. Я и забыл даже вам ответить.
Заменил Memory на RAM :)

Добавлено: Сб янв 11, 2025 22:59
Orion9
AkulaBig писал(а):Ну да. Причем еще от прошлого года. просили люди его уже об этом.
Ну я так и подумал :) Знаменит он такими ответами: это невозможно, да то невозможно. Тут как-то в топике всплывало уже, что он когда-то говорил о невозможности изменения нижних функциональных кнопок, однако почему-то у меня сейчас на нижней кнопке выхода и левый клик висит, и правый, и клик с Ctrl, и двойной клик с Ctrl; да и сама кнопка называется не "Alt+F4 Выход", а "Autorun" - как и должна была называться с самого начала :mrgreen:
AkulaBig писал(а):Если интересно
А оперативно вы "залили" вопрос на англоязычный форум, даже не ожидал :) Смотрю там и Fla$her успел тоже отметиться - ну никак не хочет возвращаться домой, бродяга, уже даже ждать его устал :lol:
AkulaBig писал(а):Как-то мне не очень зашло. Попробую.
Ну, это вы напрасно. Я пока не посмотрю на проценты в заголовке, спать не ложусь! :mrgreen: А если и ложусь, то уснуть не могу :mrgreen:

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

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

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

TOTALCMD.INC

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

[________Autorun_________]=0
cm_UwdxBarItem=70301;Uwdx Bar Menu
[cut="Plugin.aucfg"]

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

Global BarsPath = %COMMANDER_PATH% & "\Bars"

RegisterCommand 70300 "UwdxBar"
RegisterCommand 70301 "UwdxBarItem"

Func UwdxBar(lParam)   
   Local wdx, i = 1, name, p = BarsPath, n = "Auto_uwdx", bar = p & n & '.bar'
   Local b_Ctrl = IsPressed(0x11), b_Shift = IsPressed(0x10), b_Alt = IsPressed(0x12), b_Win = IsPressed(0x58)   
   
   If Not b_Ctrl And Not b_Alt And Not b_Shift Then   
      If FileExist(bar) Then
         ShowPopupMenu /D %bar%
      Else   
         ShowHint("Не найден " & bar) 
      EndIf
      Return
   EndIf
   
   If b_Shift Then 
      CommandExec /CD:S %bar% 
      Return      
   EndIf   
   
   ShowDarkHint("Создание панели", 0)
   
   If Not CreateNewBar(p, n, 0) Then
      ShowDarkHint("Отмена операции", 0)
      Return 
   EndIf
   
   While i < 100
   
      IniRead /R wdx %COMMANDER_INI% "ContentPlugins" %"%i%-1" "stop"
      If wdx="stop" Then Break
           
      name = StrTrim(StrRight(wdx, StrLen(wdx)-StrPos(wdx, "", -1)))     
      
      IniWrite /EV- %bar% "Buttonbar" %"'Button' & %i%+1" "%COMSPEC%"
      IniWrite %bar% "Buttonbar" %"'Cmd' & %i%+1"  %"'cm_UwdxBarItem ' & %i%+1"
      IniWrite %bar% "Buttonbar" %"'Menu' & %i%+1" "%name%"      
      
      i += 1
   Wend   

   IniWrite %bar% "Buttonbar" "Buttoncount"  %"%i%"
   ShowDarkHint("Панель создана", 0)

EndFunc

Func UwdxBarItem(lParam)
   Local bar = %COMMANDER_PATH% & "\Bars\Auto_uwdx.bar"
   Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx", plugin, params, f, p, n
   Local b_Ctrl = IsPressed(0x11), b_Shift = IsPressed(0x10), b_Alt = IsPressed(0x12)
   
   If Not FileExist(uwdx & "uwdx.exe") Then
      ShowHint("Не найден " & uwdx & "uwdx.exe")
      Return
   EndIf
   
   p = RequestCopyDataInfo("SP")
   n = RequestCopyDataInfo("SN")
   f = p & n

   keys = '/i /e '
   If b_Ctrl Then keys = "/i "
   IniRead plugin %bar% "Buttonbar" %"'Menu' & lParam"
   #ShowHint(lParam & ". " & b)   
   If b_Shift Then
      ShellExec %COMSPEC% '/K TITLE %plugin% & uwdx.exe /i %plugin%' %uwdx% 
      Return
   EndIf
   ShellExec %COMSPEC% '/K TITLE %plugin% & uwdx.exe %keys% %plugin% "%f%"' %uwdx%  
EndFunc
[/cut]

[cut="Functions.aucfg"]

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

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

Func CreateNewBar(BarPath, BarName, BackButton = true)
   
   Local bar, br2, def
   
   bar = BarPath & BarName & ".bar"
   br2 = BarPath & BarName & ".br2"   
   
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%bar%"""
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%br2%"""
   
   If FileExist(bar) Then   
      ShowDarkHint("Ошибка удаления " & bar, 0)
      Return false
   Endif
    
   IniWrite %bar% "Buttonbar" "Buttoncount"  "0"
   If ERROR = 1 Then 
      ShowDarkHint("Ошибка создания " & bar, 0)
      Return false
   EndIf
   
   IniRead def %COMMANDER_INI% "Buttonbar" "Buttonbar" "%COMMANDER_PATH%\DEFAULT.BAR"   
   
   If BackButton Then
      IniWrite %bar% "Buttonbar" "Button1" "wcmicons.dll,15"
      IniWrite %bar% "Buttonbar" "Cmd1" %def%
      IniWrite %bar% "Buttonbar" "Menu1" "Вернуться"
   Endif
      
   Return true
EndFunc
[/cut]
Модули можно подключить к основной конфинурации директивой Pragma:

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

[cut="Кнопка"]

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

TOTALCMD#BAR#DATA
70300

%COMMANDER_EXE%
Панель плагинов Uwdx|Ctrl - Создание новой панели|Shift - Перейти к файлу панели

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

В общем, получилась еще одна неплохая и полезная кнопка, как это и всегда бывает с плагином Autorun )

Добавлено: Сб янв 11, 2025 23:39
AkulaBig
Orion9 писал(а): Из плюсов: не нужно регистрировать кучу однотипных команд для соответствия каждому пункту меню
Дак это наоборот нововведение ТС 11.50. Теперь вместо недокументированной фичи, когда в totalcmd.ini с команды номер 60000 можно было прописывать пользовательские команды чтобы отобразить значок в меню, можно напрямую прописывать в пользовательской команде значок. При этом не надо отслеживать порядок команд, как через totalcmd.ini.

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

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

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

RegisterCommand 70300 "UwdxBar"

Func UwdxBar(lParam)   
   ShowHint(lParam)
EndFunc
Теперь, чтобы вызвать эту функцию из кнопки или пункта меню, достаточно просто указать код 70300:

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

TOTALCMD#BAR#DATA
70300

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

1
-1
Но передать в нее параметр (lParam) таким образом не получится. Здесь нужен либо внешний вызов (например TCFS2.exe /ef "msg(1075, 70300, 55, 1)", где 55 - передаваемый параметр), либо регистрация номера команды в TOTALCMD.INC и присвоение ему имени, т.е.

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

[________Autorun_________]=0
cm_UwdxBar=70300;Uwdx Bar Menu
Тогда параметр можно передать кнопке:

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

TOTALCMD#BAR#DATA
cm_UwdxBar
55
%COMMANDER_EXE%
Функция Autorun "UwdxBar" (55)

1
-1
А теперь допустим мне нужно создать панель или (что еще хуже) меню из 55 пунктов. Как в таком случае передать параметр каждому пункту меню? Есть три варианта: (1) зарегистрировать заранее все номера с параметром, как я это делал раньше, например:

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

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-версии имя класса кнопок и номера их экземпляров отличаются, пришлось это учесть исправлением строки поиска кнопки на:

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

b = WinFind(h, (AUTORUN_TCARCH = 32 ? "TButton" : "Button"), (AUTORUN_TCARCH = 32 ? 3 : 2))
Сама функция при этом не изменилась:
[cut]

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

Func AssocWinSynс()
   Local h = 0, i
   PostMessage(AUTORUN_TCHANDLE, 0x433, 519)
   # ожидание появления окна 
   For i = 1 To 75
       h = WinFind(0, "TDlgCustomColors")
       If h > 0 Then Break   
       Sleep(25)
       #OutputDebugString(h)
   Next
   If h > 0 Then   
      b = WinFind(h, (AUTORUN_TCARCH = 32 ? "TButton" : "Button"), (AUTORUN_TCARCH = 32 ? 3 : 2))
      SendMessage(b, 0xF5, 0, 0)
   Else
      ShowHint("Окно не найдено") 
      Return  
   Endif
   AssocUpdateWin(false)
EndFunc
[/cut]

Добавлено: Вс янв 12, 2025 13:41
AkulaBig
Orion9 писал(а): Каждой кнопке будет сопоставлен свой уникальный код. (Именно об этой куче команд я и говорил).
Понятно.
Orion9 писал(а): P.S. Обнаружил, что в ТС х64 переключение ассоциаций с вызовом окна и прожатием кнопки не работает.
Потому что ТС х32 и ТС х64 написаны на разных языках. Изначальный, не очень удачный выбор языка программирования сейчас для Гислера является таким головняком. Но уже ничего не поменяешь.

Добавлено: Вс янв 12, 2025 16:28
Orion9
AkulaBig
Тут пришла идея... Возможно, даже Гислер согласится такое сделать.

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

Тогда бы в цикле можно было проверять эту переменную, а не "дергать" ini-файл каждую секунду. И, кстати, каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.

Добавлено: Вс янв 12, 2025 17:02
AkulaBig
Orion9 писал(а):не "дергать" ini-файл каждую секунду.
Вы имеете виду, что Autorun его дергает? Я вообще инишник не трогаю. Насчет дерганья это вообще такое неочевидное действие. Весь компьютер дергается от кварца. Все оконные процедуры. Та-же новая переменная тоже будет дергать.
Orion9 писал(а):каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.
Она и сейчас через Autorun имеет. А толку в этом, если инишник один на все копии.

Добавлено: Вс янв 12, 2025 17:48
Orion9
AkulaBig писал(а):А толку в этом, если инишник один на все копии.
Да, об этом я не подумал. Видимо, с этим ничего не поделаешь, если только Гислер не поменяет что-то. Но все-равно чтение переменной окружения, будь она доступна, выглядит, на мой взгляд, лучше, чем вызов макроса Autorun, который обращается каждый раз к ini-файлу, разве нет?

Добавлено: Вс янв 12, 2025 20:09
AkulaBig
Orion9 писал(а):Но все-равно чтение переменной окружения, будь она доступна, выглядит, на мой взгляд, лучше, чем вызов макроса Autorun, который обращается каждый раз к ini-файлу, разве нет?
Скорей всего без разницы.

Добавлено: Пн янв 13, 2025 10:58
sa
Orion9 писал(а):Но только если это wcmicons.dll или путь к ico-файлу, а я уж губу раскатал на что-то большее..
Ещё, если это %COMMANDER_EXE% или имя программы без пути (Totalcmd.exe/TOTALCMD64.EXE). Планируется добавление shell32.dll и, возможно, imageres.dll.