Autorun
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Вызов практически не изменился от вашего. Переменным только видимость сменил и увеличил их количество. Хотя сам вызов скрипта да, изменен: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
Вообще все многоязычное. Иначе не стал-бы время тратить на универсальность. Там ведь и колонки пользователя и названия wfx-плагинов (если это возможно). И т.д. Это ладно я еще не все фишки ТС использую.Orion9 писал(а):
Вы собираетесь секцию [DirMenu] тоже в поток прикручивать?
Я имел в виду что-то вроде вот этого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;
Предельное удобство в шапке с примером и параметрами ))
А проценты в заголовке оставили? А то ведь я без них жить не могуAkulaBig писал(а):Переменным только видимость сменил и увеличил их количество.
Ого, да вы серьезно решили развернуться. Может быть и получится - это надо пробовать. Но как я писал выше, команда, которая перечитывала бы всю конфигурацию ТС, как при его запуске, очень бы не помешала. А то без нее может и не получиться. Хотя названия wfx, по-моему, Тотал перечитывает без проблем.AkulaBig писал(а):Вообще все многоязычное. Иначе не стал-бы время тратить на универсальность. Там ведь и колонки пользователя и названия wfx-плагинов
А, вы имеете ввиду в шапке скрипта. Ну да, в AkelPad так оформляют скрипты. Удобно. Но тут не понятно, пример вызова скрипта отдельно привести или из Autorun? Видимо оба варианта надо.Orion9 писал(а): Предельное удобство в шапке с примером и параметрами ))
Вы имеете ввиду проценты задержки от загрузки процессора? Я их сразу переделал, но оставил:Orion9 писал(а): А проценты в заголовке оставили? А то ведь я без них жить не могу![]()
Код: Выделить всё
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
Это был ответ Гислера что ли?AkulaBig писал(а):К сожалению, это невозможно, извините. Просто перезапустите TC с помощью, например,
cm_exit 1
Наверное, на ваше усмотрение. Все зависит от того, сколько времени и желания вы в это вложите ))AkulaBig писал(а):Но тут не понятно, пример вызова скрипта отдельно привести или из Autorun? Видимо оба варианта надо.
Нет. Я имел в виду, что к вашему коду сейчас можно добавить буквально всего одну строчку перед Sleep, и весь поток заиграет другими краскамиAkulaBig писал(а):Вы имеете ввиду проценты задержки от загрузки процессора?
Код: Выделить всё
WinSetText(StartTitle & " | Memory: " & GetMemStats(0) & "% CPU: " & cpu & "%") Ну да. Причем еще от прошлого года. просили люди его уже об этом. Если интересно https://www.ghisler.ch/board/viewtopic. ... 65#p466665Orion9 писал(а): Это был ответ Гислера что ли?![]()
Да, пропустил. Сейчас понял. Я вообще эту фишку видел в других сборках. Как-то мне не очень зашло. Попробую.Orion9 писал(а): Я писал об этом пару страниц назад, вы, наверное, пропустили?
Дак мы с Хранителем Традиций в это время бурную переписку вели. Я и забыл даже вам ответить.
Заменил Memory на RAM
Ну я так и подумалAkulaBig писал(а):Ну да. Причем еще от прошлого года. просили люди его уже об этом.
А оперативно вы "залили" вопрос на англоязычный форум, даже не ожидалAkulaBig писал(а):Если интересно
Ну, это вы напрасно. Я пока не посмотрю на проценты в заголовке, спать не ложусь!AkulaBig писал(а):Как-то мне не очень зашло. Попробую.
Хорошо, если серьезно: вы можете туда не только датчики производительности вывести, но и другое что-то придумать, поток-то все-равно крутится, и фактически вхолостую. Можно, например, проверку какую-нибудь раз в полчаса делать или данные из au3-скрипта переодически вытягивать - здесь есть где развернуться фантазии.
А тем временем, я опробовал новую технику создания бар-файла и передачи из него параметров назад в Autorun через cm_ команду. Очень неплохо получилось, но есть один недостаток: команда прописывается в TOTALCMD.INC, поэтому придется самостоятельно следить за этим файлом при обновлении ТС. А если команда еще имеет и русскоязычное описание в WCMD_RUS.INC, то придется следить и за этим файлом.
Из плюсов: не нужно регистрировать кучу однотипных команд для соответствия каждому пункту меню или использовать внешние утилиты для вызова, типа TCFS2.
TOTALCMD.INC
Код: Выделить всё
[________Autorun_________]=0
cm_UwdxBarItem=70301;Uwdx Bar MenuКод: Выделить всё
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="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
Модули можно подключить к основной конфинурации директивой 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
Кнопка открывает все установленные wdx-плагины в виде меню и отображает информацию по каждому плагину в утилите uwdx.При выборе плагина по умолчанию отображаются все непустые поля файла под курсором. Удержание CTRL - все поля. SHIFT - структура плагина. Если панель существует, при нажатии на кнопку она будет открыта сразу. CTRL - пересоздание панели. SHIFT - переход к файлу панели. Название файла панели и путь к утилите uwdx.exe нужно поменять в скрипте (у меня это %COMMANDER_PATH% & "\Plugins\uwdx).
В общем, получилась еще одна неплохая и полезная кнопка, как это и всегда бывает с плагином Autorun )
Дак это наоборот нововведение ТС 11.50. Теперь вместо недокументированной фичи, когда в totalcmd.ini с команды номер 60000 можно было прописывать пользовательские команды чтобы отобразить значок в меню, можно напрямую прописывать в пользовательской команде значок. При этом не надо отслеживать порядок команд, как через totalcmd.ini.Orion9 писал(а): Из плюсов: не нужно регистрировать кучу однотипных команд для соответствия каждому пункту меню
AkulaBig
Ты глянь, и правда можно
Но только если это wcmicons.dll или путь к ico-файлу, а я уж губу раскатал на что-то большее...) Но хоть так, и то уже лучше.
Но говоря о куче однотипных команд, я имел в виду другое. Самый большой недостаток вызова зарегистрированной комады по коду - в неё нельзя передать параметр, если вызов происходит из кнопки или пункта меню. Единственный способ передать параметр в таком случае - использовать внешний вызов с посылкой сообщения через PostMessage с указанием кода команды и одного числового параметра. Например, регистрируем команду с кодом 70300 и привязываем к нему функцию UwdxBar:
Теперь, чтобы вызвать эту функцию из кнопки или пункта меню, достаточно просто указать код 70300:
Но передать в нее параметр (lParam) таким образом не получится. Здесь нужен либо внешний вызов (например TCFS2.exe /ef "msg(1075, 70300, 55, 1)", где 55 - передаваемый параметр), либо регистрация номера команды в TOTALCMD.INC и присвоение ему имени, т.е.
Тогда параметр можно передать кнопке:
А теперь допустим мне нужно создать панель или (что еще хуже) меню из 55 пунктов. Как в таком случае передать параметр каждому пункту меню? Есть три варианта: (1) зарегистрировать заранее все номера с параметром, как я это делал раньше, например:
Каждой кнопке будет сопоставлен свой уникальный код. (Именно об этой куче команд я и говорил).
Второй вариант - посылка параметра через сообщение, т.е. в созданной панели у каждой кнопки будет вариация: 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-версии имя класса кнопок и номера их экземпляров отличаются, пришлось это учесть исправлением строки поиска кнопки на:
Сама функция при этом не изменилась:
[cut][/cut]
Ты глянь, и правда можно
Но говоря о куче однотипных команд, я имел в виду другое. Самый большой недостаток вызова зарегистрированной комады по коду - в неё нельзя передать параметр, если вызов происходит из кнопки или пункта меню. Единственный способ передать параметр в таком случае - использовать внешний вызов с посылкой сообщения через PostMessage с указанием кода команды и одного числового параметра. Например, регистрируем команду с кодом 70300 и привязываем к нему функцию UwdxBar:
Код: Выделить всё
RegisterCommand 70300 "UwdxBar"
Func UwdxBar(lParam)
ShowHint(lParam)
EndFuncКод: Выделить всё
TOTALCMD#BAR#DATA
70300
%COMMANDER_EXE%
Функция Autorun "UwdxBar"
1
-1
Код: Выделить всё
[________Autorun_________]=0
cm_UwdxBar=70300;Uwdx Bar MenuКод: Выделить всё
TOTALCMD#BAR#DATA
cm_UwdxBar
55
%COMMANDER_EXE%
Функция Autorun "UwdxBar" (55)
1
-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
Понятно.Orion9 писал(а): Каждой кнопке будет сопоставлен свой уникальный код. (Именно об этой куче команд я и говорил).
Потому что ТС х32 и ТС х64 написаны на разных языках. Изначальный, не очень удачный выбор языка программирования сейчас для Гислера является таким головняком. Но уже ничего не поменяешь.Orion9 писал(а): P.S. Обнаружил, что в ТС х64 переключение ассоциаций с вызовом окна и прожатием кнопки не работает.
AkulaBig
Тут пришла идея... Возможно, даже Гислер согласится такое сделать.
В общем, что если попросить его добавить еще одну переменную окружения типа COMMANDER_*, которая будет хранить информацию о текущем языке? Например: %COMMANDER_LANG% = WCMD_RUS.LNG
Тогда бы в цикле можно было проверять эту переменную, а не "дергать" ini-файл каждую секунду. И, кстати, каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.
Тут пришла идея... Возможно, даже Гислер согласится такое сделать.
В общем, что если попросить его добавить еще одну переменную окружения типа COMMANDER_*, которая будет хранить информацию о текущем языке? Например: %COMMANDER_LANG% = WCMD_RUS.LNG
Тогда бы в цикле можно было проверять эту переменную, а не "дергать" ini-файл каждую секунду. И, кстати, каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.
Вы имеете виду, что Autorun его дергает? Я вообще инишник не трогаю. Насчет дерганья это вообще такое неочевидное действие. Весь компьютер дергается от кварца. Все оконные процедуры. Та-же новая переменная тоже будет дергать.Orion9 писал(а):не "дергать" ini-файл каждую секунду.
Она и сейчас через Autorun имеет. А толку в этом, если инишник один на все копии.Orion9 писал(а):каждая запущенная копия ТС имела бы свою переменную, а не общий ключ из ini.
Да, об этом я не подумал. Видимо, с этим ничего не поделаешь, если только Гислер не поменяет что-то. Но все-равно чтение переменной окружения, будь она доступна, выглядит, на мой взгляд, лучше, чем вызов макроса Autorun, который обращается каждый раз к ini-файлу, разве нет?AkulaBig писал(а):А толку в этом, если инишник один на все копии.
Ещё, если это %COMMANDER_EXE% или имя программы без пути (Totalcmd.exe/TOTALCMD64.EXE). Планируется добавление shell32.dll и, возможно, imageres.dll.Orion9 писал(а):Но только если это wcmicons.dll или путь к ico-файлу, а я уж губу раскатал на что-то большее..