View previous topic :: View next topic |
Author |
Message |
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Sat Jul 01, 2023 19:51 Post subject: |
|
|
Loopback
Вполне допускаю, что понял неверно , сейчас ещё раз перечитал с поста от 24го и теперь задача как будто выглядит так: проверять, что в памяти не осталось копий процессов TC, полное имя испоняемого файла которых то же, что и у родительского процесса скрипта.
Если так, то логичнее реализовать в скрипте, вместо автозавершения скрипта в AutorunFinalizeSection.
P.S. Интересно звучит задачка. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1169 Location: Макеевка
|
(Separately) Posted: Sat Jul 01, 2023 23:41 Post subject: |
|
|
Другими словами немного подробней.
Есть мой Тотал, настроенный. В Autorun прописан запуск программы, она запускается и работает в фоне. Я могу запускать несколько копий моего Тотала и закрывать их. Всё это время программа должна быть запущена. Когда я закрою последнюю копию моего Тотала - программа должна выгрузиться.
В то же время параллельно я могу запускать чистый Тотал или чужие сборки. Они никак не должны влиять на запуск и закрытие программы.
PS. В моём случае нужная "программа" - это скомпилированный скрипт. Задача на таком уровне решаемая - запоминать или записывать в отдельный файл все PID запускаемого процесса ТС и время от времени опрашивать их. Если все PID выгружены - то выгружается и программа-скрипт.
Но пока не стал усложнять и сделал просто - программа работает до тех пор, пока запущено хоть одно окно любого ТС. _________________ Windows 11 | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Skif_off
Joined: 28 Nov 2012 Posts: 1232
|
(Separately) Posted: Mon Jul 03, 2023 20:52 Post subject: |
|
|
LonerD wrote: | ... мой Тотал ... несколько копий моего Тотала ... |
Т.е. "мой" лежит в конкретной папке, любой не-"мой" - в любом другом каталоге?
LonerD wrote: | запоминать или записывать в отдельный файл все PID запускаемого процесса ТС и время от времени опрашивать их. Если все PID выгружены - то выгружается и программа-скрипт. |
Как-то всё вместе не очень понятно звучит , скрипт сам запускает все другие копии ТС или он для другого? Если второе, то получать и хранить список PID как-то расточительно, на AutoIt добавил бы в скрипт что-то типа такого:
Code: | #NoTrayIcon
#include "WinAPIEx.au3"
; Регистрируем функцию проверки процессов
AdlibRegister("CheckProc", 3000)
Local $sTCExe = _WinAPI_GetProcessFileName($CmdLine[1])
Local $sTCPath = StringRegExpReplace($sTCExe, "\\[^\\]+$", "\\")
Local $iTCNameLen = StringLen($sTCPath)
; Тут собственно скрипт
Func CheckProc()
AdlibUnRegister("CheckProc")
Local $sTmp
Local $iCount = 0
Local $aProcList = ProcessList()
For $i = 1 To $aProcList[0][0]
If StringMid($aProcList[$i][1], 1, 8) = "TOTALCMD" Then
$sTmp = _WinAPI_GetProcessFileName($aProcList[$i][0])
If StringMid($sTmp, 1, $iTCNameLen) = $sTCPath Then
$iCount += 1
ExitLoop
EndIf
EndIf
Next
If $iCount = 0 Then Exit
EndFunc |
$CmdLine[1] - PID родительского ТС, получаем от Autorun и используем для получения каталога TC из полного имени исполняемого файла, раз в 3 секунды перебираем PID'ы, смотрим, где лежат исполняемые файлы и сравниваем.
Если скрипт что-то пишет, то Exit, наверное, стоит заменить на переменную и обрабатывать ее в основном теле скрипта.
ProcessList() можно запускать с параметром и она сама отфильтрует по имени процесса, выйдет покороче, но процессов может быть два, "TOTALCMD.EXE" и "TOTALCMD64.EXE", поэтому только перебор всех.
Есть ещё вариант получить список всех окон, отфильтрованный по "TTOTAL_CMD", но некоторые инструменты можно запускать отдельным процессом... |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1169 Location: Макеевка
|
(Separately) Posted: Fri Jul 14, 2023 02:15 Post subject: |
|
|
Время от времени стали возникать непонятные проблемы (может они и раньше возникали, просто Тоталом менее активно пользовался).
В autorun.cfg прописаны переменные окружения. Например,
SetEnv /A /EV PATH ;%commander_path%\System
SetEnv /EV TCFS %commander_path%\Plugins\exe\TCFS2\TCFS2.exe
и прочие.
Иногда Тотал теряет их. И при попытке выполнить команду, содержащую такую переменную, выдаёт ошибку, что "такого файла не существует".
Нечасто, может раз-два в неделю. Не могу понять причину и закономерности, почему так происходит. После перезапуска Тотала всё снова работает.
Может кто сталкивается?
Или плагин Autorun выгружается? (по какой причине это может происходить? командой выгрузки плагинов не пользуюсь). Или работа назначенных при запуске переменных не зависит от него? _________________ Windows 11 | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1316
|
(Separately) Posted: Sun Jul 16, 2023 23:10 Post subject: |
|
|
LonerD wrote: | Или плагин Autorun выгружается? (по какой причине это может происходить? командой выгрузки плагинов не пользуюсь). Или работа назначенных при запуске переменных не зависит от него? |
Да, переменные окружения после создания не зависят от состояния запуска Autorun.
Больше добавить ничего не могу, не сталкивался с таким. Если при возникновении проблемы посмотреть переменные плагином EnvVariables, их содержимое выглядит нормально? |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1169 Location: Макеевка
|
(Separately) Posted: Sun Jul 16, 2023 23:42 Post subject: |
|
|
Loopback wrote: | Если при возникновении проблемы посмотреть переменные плагином EnvVariables, их содержимое выглядит нормально? |
Я несколько раз быстренько перезапускал Тотал, а потом только вспоминал, что забыл посмотреть список переменных. _________________ Windows 11 | TC DreamLair eternal pre-α |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1169 Location: Макеевка
|
(Separately) Posted: Fri Jul 28, 2023 23:18 Post subject: |
|
|
Опять отвалились переменные на ровном месте.
В плагине Autorun прописано так:
Code: | SetEnv /A /EV PATH ;%commander_path%
SetEnv /A /EV PATH ;%commander_path%\System |
В %commander_path%\System лежит файл Hidcon.exe для скрытия консольных окон. И есть несколько пользовательских команд, начинающихся с конструкции:
cmd=Hidcon.exe %comspec% /c
Запускаю последовательно несколько команд, потом оп - через пару секунд следующая уже не запускается. Посмотрел плагином EnvVariables - добавленные значения в переменной PATH пропали. Перезапустил Тотал, попробовал снова, воспроизвести пропадание не удалось.
Заметил ошибки в моей записи.
1. Для чего у меня было /EV - не знаю.
2. Точку с запятой правильнее ставить в конце пути, иначе в тексте переменной получится ;;
Правильно будет вот так:
Code: | SetEnv /A PATH %commander_path%;
SetEnv /A PATH %commander_path%\System; |
-----------------------
Но выявил и другую проблему, которая касается непосредственно плагина.
Время от времени перезапускаю Тотал. Не закрываю, а перезапускаю утилитой Tinny TC Restarter. Оказывается, в конце переменной PATH накапливаются записи вида
Code: | ;D:\TCDL;D:\TCDL\System;D:\TCDL;D:\TCDL\System;D:\TCDL;D:\TCDL\System;D:\TCDL;D:\TCDL\System; |
Может, Windows время от времени запускает внутреннюю проверку состояния системы, обнаруживает это непотребство и удаляет подозрительные записи.
По справке:
При использовании опции /A плагин проверяет наличие добавляемого текста в конце значения переменной и не добавляет его повторно.
На деле это почему-то не работает.
Windows 11 x64, TC 11 RC3, Autorun 2.2.10 beta.
Попробовал более ранние версии Autorun - поведение то же самое. _________________ Windows 11 | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1316
|
(Separately) Posted: Sat Jul 29, 2023 22:25 Post subject: |
|
|
LonerD wrote: | Запускаю последовательно несколько команд, потом оп - через пару секунд следующая уже не запускается. Посмотрел плагином EnvVariables - добавленные значения в переменной PATH пропали. Перезапустил Тотал, попробовал снова, воспроизвести пропадание не удалось. |
Интересно, получается, что пропадают добавленные записи в PATH. В принципе, PATH достаточно критичная переменная, может это работа антивируса какого?
LonerD wrote: | 1. Для чего у меня было /EV - не знаю. |
Переключатель /EV остался от совсем ранних времён, когда он включал разворачивание переменных. Сейчас он ничего не делает, т.к. разворачивание включено по умолчанию, а отключается с помощью /EV-.
LonerD wrote: | 2. Точку с запятой правильнее ставить в конце пути, иначе в тексте переменной получится ;; |
А это зависит от конкретной системы, что туда записано. У меня в конце PATH нет точки с запятой. В принципе, в случае сомнений правильнее проверять наличие ; в конце исходной переменной перед дозаписью.
LonerD wrote: | Оказывается, в конце переменной PATH накапливаются записи вида |
В принципе, тут всё согласно документации - проверяется текст в конце, а тут для каждой команды предыдущий текст будет другой. Т.е. чтобы всё сработало, надо устанавливать весь текст одной командой:
Code: | SetEnv /A PATH %commander_path%;%commander_path%\System; |
Возможно, стоит добавить уточнение в справку.
LonerD wrote: | Может, Windows время от времени запускает внутреннюю проверку состояния системы, обнаруживает это непотребство и удаляет подозрительные записи. |
Содержимое переменной PATH, с которой оперирует процесс тотала - унаследованное, т.е. изменение системного PATH после запуска TC уже не повлияет на PATH процесса тотала. Ну вроде так всегда раньше было, может что-то в 11 поменялось... |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1169 Location: Макеевка
|
(Separately) Posted: Sat Aug 05, 2023 21:22 Post subject: |
|
|
Loopback wrote: | Т.е. чтобы всё сработало, надо устанавливать весь текст одной командой:
Code: | SetEnv /A PATH %commander_path%;%commander_path%\System; |
|
Теперь всё отлично, лишние записи не появляются. _________________ Windows 11 | TC DreamLair eternal pre-α |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 212 Location: Электросталь
|
(Separately) Posted: Mon Aug 07, 2023 02:32 Post subject: |
|
|
Вот такой вариант окошка копирования F5/F6 в TC 11.00 на Win 10:
И его код:
Code: | LoadLibrary 'Plugins\Autorun_ModifyDialogs.dll'
IniRead CRNTLNG %COMMANDER_INI% "Configuration" "LanguageIni"
IniRead AUTOSIZE %COMMANDER_INI% "Configuration" "AutoSizeDialogs" 1
# cm_Copy, cm_RenMove F5/F6
If %AUTORUN_TCARCH% = 32 Then
If %AUTOSIZE% = 1 Then
AddDialog DIALOG_COPYMOVE
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:8 /W:-7 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:67 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-223 "TButton" 4 "" #Tree
AddControl /X:-20 /W:-18 "TButton" 1 "" #F2
AddControl /X:-167 /W:-78 "TButton" 2 "⌵" #Options
AddControl /X:329 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:8 /W:-7 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:67 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-223 "TButton" 4 "" #Tree
AddControl /X:-20 /W:-18 "TButton" 1 "" #F2
AddControl /X:329 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
Else # %AUTOSIZE% = 0
AddDialog DIALOG_COPYMOVE
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-4 /W:5 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:64 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-225 "TButton" 4 "" #Tree
AddControl /X:-19 /W:-18 "TButton" 1 "" #F2
AddControl /X:-169 /W:-78 "TButton" 2 "⌵" #Options
AddControl /X:330 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-4 /W:5 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:64 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-225 "TButton" 4 "" #Tree
AddControl /X:-19 /W:-18 "TButton" 1 "" #F2
AddControl /X:330 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
EndIf
Else # %AUTORUN_TCARCH% = 64
If %AUTOSIZE% = 1 Then
AddDialog DIALOG_COPYMOVE
AddControl /W:-20 "Button" 5 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:10 /W:-10 "Button" 3 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:68 /W:-65 "Button" 3 "" #MD5
EndIf
AddControl /X:-223 "Button" 7 "" #Tree
AddControl /X:-20 /W:-18 "Button" 1 "" #F2
AddControl /X:-167 /W:-78 "Button" 2 "⌵" #Options
AddControl /X:329 /W:-18 "Button" 8 "" #OK
AddControl /X:106 /W:2 "Button" 6 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-20 "Button" 10 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:10 /W:-10 "Button" 8 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:68 /W:-65 "Button" 8 "" #MD5
EndIf
AddControl /X:-223 "Button" 12 "" #Tree
AddControl /X:-20 /W:-18 "Button" 6 "" #F2
AddControl /X:329 /W:-18 "Button" 13 "" #OK
AddControl /X:106 /W:2 "Button" 11 "" #Cancel
Else # %AUTOSIZE% = 0
AddDialog DIALOG_COPYMOVE
AddControl "Button" 0 ""
AddControl /W:-20 "Button" 4 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-5 /W:5 "Button" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:65 /W:-65 "Button" 1 "" #MD5
EndIf
AddControl /X:-225 "Button" 6 "" #Tree
AddControl /X:-20 /W:-18 "Button" 2 "" #F2
AddControl /X:-167 /W:-78 "Button" 3 "⌵" #Options
AddControl /X:331 /W:-18 "Button" 7 "" #OK
AddControl /X:107 /W:2 "Button" 5 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl "Button" 0 ""
AddControl /W:-20 "Button" 9 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-5 /W:5 "Button" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:65 /W:-65 "Button" 1 "" #MD5
EndIf
AddControl /X:-225 "Button" 11 "" #Tree
AddControl /X:-20 /W:-18 "Button" 7 "" #F2
AddControl /X:331 /W:-18 "Button" 12 "" #OK
AddControl /X:107 /W:2 "Button" 10 "" #Cancel
EndIf
EndIf
ModifyDialogs |
Это при шрифте для диалогов Segoe UI, 9.
Loopback
В коде, в 64-битной части есть пара строк:
Code: | AddControl "Button" 0 "" |
Без них отказывались работать строки с Button 1, вот такие:
Code: | AddControl /X:-5 /W:5 "Button" 1 "" #MD5 |
Точнее, вначале когда я написал строку с Button 1, она не работала. Потом стал экспериментировать, проверять где какие instance, и при добавлении Button 0 вдруг заработала Button 1. Потом, после того, как весь код был готов, Button 1 вроде заработала и без Button 0. Но я уж не стал ничего трогать, оставил нули на всякий пожарный. Как думаете, почему такое поведение? Я сам ума не приложу. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1316
|
(Separately) Posted: Mon Aug 07, 2023 23:20 Post subject: |
|
|
yozhik
Трудно сказать. Нулевой экземпляр не имеет смысла, т.к. нумерация начинается с 1, для него никогда не будет найден хэндл контрола и следовательно, не будет производиться никаких действий. А вот почему сначала не работало - в прошлом году мы уже сталкивались с каким-то странным несовпадением экземпляров в x64, возможно это что-то из той же оперы. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 212 Location: Электросталь
|
(Separately) Posted: Mon Aug 07, 2023 23:57 Post subject: |
|
|
Сегодня повторилось с двумя другими диалогами. В одном код «промахивался» мимо экземпляров, пока не подставил вызов нулевого — сразу заработало. А во втором случае уже в настроенном (вчера) диалоге перестал отображаться назначенный кнопке текст (я вместо «Справка» назначил «?»). Вписал в код вызов нулевого — всё встало на места.
Скажите, пожалуйста, а не трудоёмко ли будет добавить в AddControl возможность вместо текста назначать иконку? Например, как-то так:
Code: | AddControl /W:-40 "TButton" 3 %ICON%,8 |
В переменной адрес к *.dll, и после запятой номер иконки в наборе. Я сегодня дооолго искал хоть какой подходящий символ для кнопки «Дерево». Не нашёл, нету. А так бы что-нибудь такое поставил , очень было бы удобно. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1316
|
(Separately) Posted: Tue Aug 08, 2023 23:22 Post subject: |
|
|
yozhik wrote: | Вписал в код вызов нулевого — всё встало на места. |
Я так понимаю, это только в x64? Такое впечатление, что что-то не инициализируется без предварительного холостого прогона, но что именно, неясно. Посмотрел наиболее очевидные места, проблем не увидел. Хорошо бы, конечно, выделить минимальный код, при котором проблема повторяется...
yozhik wrote: | а не трудоёмко ли будет добавить в AddControl возможность вместо текста назначать иконку? |
Без сложностей иконку можно поставить только на стандартные кнопки и static-контролы. Наследники static в формах TC не используются, остаются только кнопки. В их основе стандартный button, но это же delphi/lazarus, как они себя поведут, без тестов непонятно. Если нормально, то должно быть не слишком сложно. |
|
Back to top |
|
|
yozhik
Joined: 04 May 2014 Posts: 212 Location: Электросталь
|
(Separately) Posted: Wed Aug 09, 2023 01:46 Post subject: |
|
|
Loopback wrote: | Я так понимаю, это только в x64? |
Нет-с. И в 32-битном тоже.
Loopback wrote: | выделить минимальный код, при котором проблема повторяется... |
Вот к счастью у меня сразу воспроизвелось. Уточним: Тотал 11.00 32/64, Windows 10 21H2 64bit. Запускаю 32-битный TC:
Я прошу прощения, давайте я вам откопирую всё, что для ModifyDialogs наваял (в следующем посте сообразил и сделал краткий код как вы просили). Я себе плохо представляю механизмы всей этой кухни, а вдруг там что-то ещё влияет. Но у меня всё прокомментировано, так что вам будет удобно найти нужный отрывок. Сейчас у меня все нулевые вызовы закомментированы. При первом же запуске артефакт проявляется в 2х диалогах: распаковки и атрибутов (на скринах). После раскомментирования нулевых начинает отображаться «?», как и задумано.
Изменённые диалоги Code: | # ПЛАГИНЫ: ЗАГРУЗКА ......................................................... #
LoadLibrary 'Plugins\Autorun_ModifyDialogs.dll'
# ПЛАГИНЫ: переменные для имён элементов .................................... #
IniRead CRNTLNG %COMMANDER_INI% "Configuration" "LanguageIni"
If %CRNTLNG% = '' Then
Set TREEBTN "&Tree"
Else
LngRead TREEBTN 5002 "%COMMANDER_PATH%\LANGUAGE\%CRNTLNG%"
EndIf
IniRead AUTOSIZE %COMMANDER_INI% "Configuration" "AutoSizeDialogs" 1
IniRead FONTNAME %COMMANDER_INI% "AllResolutions" "FontNameDialog"
IniRead FONTSIZE %COMMANDER_INI% "AllResolutions" "FontSizeDialog"
# ПЛАГИНЫ: MODIFY_DIALOGS ................................................... #
# Диалог cm_CopySamePanel Shift+F5/F6
# AUTOSIZE, FONTNAME, FONTSIZE здесь не влияют
If %AUTORUN_TCARCH% = 32 Then
AddDialog /W:105 /CENTER:1 "TCheckComboBox"
AddControl /W:109 "TMyComboBox" 1
AddControl /Y:4 "TMyCheckBox" 2 "" #NTFS
AddControl /Y:2 "TMyCheckBox" 1 "" #MD5
AddCondition /TEXT "TButton" 1 %TREEBTN%
AddControl /X:-222 "TButton" 1 "" #Tree
AddControl /X:257 "TButton" 3 "" #OK
AddControl /X:106 "TButton" 2 "" #Cancel
Else
AddDialog /W:105 /CENTER:1 "TCheckComboBox"
AddControl /W:109 "LCLComboBox" 1 "" # м.б. когда-то заработает :(
AddCondition /TEXT "Button" 3 %TREEBTN%
AddControl /Y:6 "Button" 6 "" #NTFS
AddControl /Y:4 "Button" 2 "" #MD5
AddControl /X:-224 /Y:-8 "Button" 3 "" #Tree
AddControl /X:253 /Y:-8 "Button" 5 "" #OK
AddControl /X:102 /Y:-8 "Button" 4 "" #Cancel
EndIf
# Диалог создания файла cm_EditNewFile Shift+F4
# кнопку Дерево переносим на левый край, кнопки OK и Cancel справа вместе
# AUTOSIZE, FONTNAME, FONTSIZE здесь не влияют
If %AUTORUN_TCARCH% = 32 Then
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "TButton" 1 %TREEBTN%
AddControl /X:-149 /W:-28 "TButton" 1 "" #Tree
AddControl /X:-2 "TButton" 2 "" #Cancel
AddControl /X:2 "TButton" 3 "" #OK
Else
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "Button" 1 %TREEBTN%
AddControl /X:-149 /W:-28 "Button" 1 "" #Tree
AddControl /X:-2 "Button" 2 "" #Cancel
AddControl /X:2 "Button" 3 "" #OK
Endif
# Диалог атрибутов cm_SetAttrib
If %AUTORUN_TCARCH% = 32 Then
If %AUTOSIZE% = 1 Then
AddDialog "TATTRIBDLG"
# AddControl "TButton" 0
AddControl /X:-330 /W:-80 "TButton" 7 "?" #Help
AddControl /X:208 "TButton" 9 "" #OK
AddControl /X:204 "TButton" 8 "" #Cancel
Else
AddDialog "TATTRIBDLG"
# AddControl "TButton" 0
AddControl /X:-331 /W:-80 "TButton" 7 "?" #Help
AddControl /X:207 "TButton" 9 "" #OK
AddControl /X:203 "TButton" 8 "" #Cancel
Endif
Else
If %AUTOSIZE% = 1 Then
AddDialog "TATTRIBDLG"
# AddControl "Button" 0
AddControl /X:-329 /W:-80 "Button" 11 "?" #Help
AddControl /X:207 "Button" 13 "" #OK
AddControl /X:203 "Button" 12 "" #Cancel
Else
AddDialog "TATTRIBDLG"
# AddControl "Button" 0
AddControl /X:-330 /W:-80 "Button" 11 "?" #Help
AddControl /X:206 "Button" 13 "" #OK
AddControl /X:202 "Button" 12 "" #Cancel
Endif
Endif
# Диалог упаковки cm_PackFiles Alt+F5
If %AUTORUN_TCARCH% = 32 Then
If %AUTOSIZE% = 1 Then
AddDialog /H:13 "TDLGZIP"
# AddControl "TButton" 0
AddControl /X:-236 /Y:12 "TButton" 4 "" #Tree
AddControl /X:167 /Y:12 "TButton" 5 "" #OK
AddControl /X:70 /Y:12 "TButton" 3 "" #Cancel
AddControl /X:70 /Y:12 /W:-70 "TButton" 1 "?" #Help
Else
AddDialog /H:14 "TDLGZIP"
# AddControl "TButton" 0
AddControl /X:-236 /Y:14 "TButton" 4 "" #Tree
AddControl /X:167 /Y:14 "TButton" 5 "" #OK
AddControl /X:70 /Y:14 "TButton" 3 "" #Cancel
AddControl /X:70 /Y:14 /W:-70 "TButton" 1 "?" #Help
EndIf
Else
If %AUTOSIZE% = 1 Then
AddDialog /H:13 "TDLGZIP"
# AddControl "Button" 0
AddControl /X:-230 /Y:12 "Button" 21 "" #Tree
AddControl /X:170 /Y:12 "Button" 22 "" #OK
AddControl /X:75 /Y:12 "Button" 20 "" #Cancel
AddControl /X:75 /Y:12 /W:-69 "Button" 5 "?" #Help
Else
AddDialog /H:14 "TDLGZIP"
# AddControl "Button" 0
AddControl /X:-232 /Y:14 "Button" 21 "" #Tree
AddControl /X:170 /Y:14 "Button" 22 "" #OK
AddControl /X:75 /Y:14 "Button" 20 "" #Cancel
AddControl /X:75 /Y:14 /W:-68 "Button" 5 "?" #Help
Endif
Endif
# Диалог распаковки cm_UnpackFiles Alt+F9/Alt+F6
If %AUTORUN_TCARCH% = 32 Then
AddDialog "TDLGUNZIPALL"
# AddControl "TButton" 0
AddControl /W:2 "TMyComboBox" 1 "" #Auto-detect
AddControl /X:80 /W:-80 "TButton" 1 "?" #Help
If %AUTOSIZE% = 1 Then
AddControl /X:-166 "TButton" 3 "" #Tree
AddControl /X:202 "TButton" 4 "" #OK
AddControl /X:82 "TButton" 2 "" #Cancel
Else
AddControl /X:-167 "TButton" 3 "" #Tree
AddControl /X:205 "TButton" 4 "" #OK
AddControl /X:84 "TButton" 2 "" #Cancel
Endif
Else # %AUTORUN_TCARCH% = 64
AddDialog "TDLGUNZIPALL"
# AddControl "Button" 0
AddControl /X:-165 "Button" 4 "" #Tree
AddControl /X:201 "Button" 5 "" #OK
AddControl /X:82 "Button" 3 "" #Cancel
AddControl /X:80 /W:-80 "Button" 2 "?" #Help
Endif
# Диалог копирования/перемещения cm_Copy/cm_RenMove F5/F6
# кнопки слева-направо: Дерево, В очередь, Доп. (со стрелочкой), OK, Отмена
# FONTNAME, FONTSIZE не стал пока указывать
If %AUTORUN_TCARCH% = 32 Then
If %AUTOSIZE% = 1 Then
AddDialog DIALOG_COPYMOVE
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:8 /W:-7 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:67 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-223 "TButton" 4 "" #Tree
AddControl /X:-20 /W:-18 "TButton" 1 "" #F2
AddControl /X:-164 /W:-86 "TButton" 2 "⌵" #Options
AddControl /X:329 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:8 /W:-7 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:67 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-223 "TButton" 4 "" #Tree
AddControl /X:-20 /W:-18 "TButton" 1 "" #F2
AddControl /X:329 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
Else # %AUTOSIZE% = 0
AddDialog DIALOG_COPYMOVE
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-4 /W:5 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:64 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-225 "TButton" 4 "" #Tree
AddControl /X:-19 /W:-18 "TButton" 1 "" #F2
AddControl /X:-165 /W:-86 "TButton" 2 "⌵" #Options
AddControl /X:330 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-20 "TMyCheckBox" 3 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-4 /W:5 "TMyCheckBox" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:64 /W:-68 "TMyCheckBox" 1 "" #MD5
EndIf
AddControl /X:-225 "TButton" 4 "" #Tree
AddControl /X:-19 /W:-18 "TButton" 1 "" #F2
AddControl /X:330 /W:-18 "TButton" 5 "" #OK
AddControl /X:106 /W:2 "TButton" 3 "" #Cancel
EndIf
Else # %AUTORUN_TCARCH% = 64
If %AUTOSIZE% = 1 Then
AddDialog DIALOG_COPYMOVE
AddControl /W:-20 "Button" 5 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:10 /W:-10 "Button" 3 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:68 /W:-65 "Button" 3 "" #MD5
EndIf
AddControl /X:-223 "Button" 7 "" #Tree
AddControl /X:-20 /W:-18 "Button" 1 "" #F2
AddControl /X:-163 /W:-85 "Button" 2 "⌵" #Options
AddControl /X:329 /W:-18 "Button" 8 "" #OK
AddControl /X:106 /W:2 "Button" 6 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl /W:-20 "Button" 10 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:10 /W:-10 "Button" 8 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:68 /W:-65 "Button" 8 "" #MD5
EndIf
AddControl /X:-223 "Button" 12 "" #Tree
AddControl /X:-20 /W:-18 "Button" 6 "" #F2
AddControl /X:329 /W:-18 "Button" 13 "" #OK
AddControl /X:106 /W:2 "Button" 11 "" #Cancel
Else # %AUTOSIZE% = 0
AddDialog DIALOG_COPYMOVE
AddControl "Button" 0 ""
AddControl /W:-20 "Button" 4 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-5 /W:5 "Button" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:65 /W:-65 "Button" 1 "" #MD5
EndIf
AddControl /X:-225 "Button" 6 "" #Tree
AddControl /X:-20 /W:-18 "Button" 2 "" #F2
AddControl /X:-164 /W:-85 "Button" 3 "⌵" #Options
AddControl /X:331 /W:-18 "Button" 7 "" #OK
AddControl /X:107 /W:2 "Button" 5 "" #Cancel
AddDialog DIALOG_COPYMOVE_PINNED
AddControl "Button" 0 ""
AddControl /W:-20 "Button" 9 "" #NTFS
If StrPos(%CRNTLNG%, "RUS") > 0 Then
AddControl /X:-5 /W:5 "Button" 1 "" #MD5
ElseIf StrPos(%CRNTLNG%, "ENG") > 0 Then
AddControl /X:65 /W:-65 "Button" 1 "" #MD5
EndIf
AddControl /X:-225 "Button" 11 "" #Tree
AddControl /X:-20 /W:-18 "Button" 7 "" #F2
AddControl /X:331 /W:-18 "Button" 12 "" #OK
AddControl /X:107 /W:2 "Button" 10 "" #Cancel
EndIf
EndIf
ModifyDialogs
|
Loopback wrote: | Без сложностей иконку можно поставить только на стандартные кнопки и static-контролы. |
Ну, и прекрасно, хватит за глаза. Давайте, пожалуйста, попробуем. Если получится, то я бы все «Справки» и «Деревья» под аккуратные контурные иконки «спрятал» , гораздо бы эргономичней вышло. Можно пока начать только с кнопок — на них иконки точно нужны. А вот пригодится ли это для static-контролов я пока не приглядывался.
Last edited by yozhik on Thu Aug 10, 2023 20:13; edited 1 time in total |
|
Back to top |
|
|
lz57005
Joined: 05 Mar 2020 Posts: 26
|
(Separately) Posted: Wed Aug 09, 2023 22:29 Post subject: |
|
|
LonerD wrote: | Другими словами немного подробней.
Есть мой Тотал, настроенный. В Autorun прописан запуск программы, она запускается и работает в фоне. Я могу запускать несколько копий моего Тотала и закрывать их. Всё это время программа должна быть запущена. Когда я закрою последнюю копию моего Тотала - программа должна выгрузиться.
В то же время параллельно я могу запускать чистый Тотал или чужие сборки. Они никак не должны влиять на запуск и закрытие программы.
|
Очевидное решение использовать как признак запуска программы наличие/отсутствие PID c нужным ImagePath, а не именем процесса, а при закрытии проверять аналогично процессы с путём %commander_exe% и закрывать программу тоже не по имени, вот пример:
MultiTCruncloseExample.7z
Code: | autorun.cfg
...
ShellExec /SW_HIDE "%COMMANDER_PATH%\utils\StartDummy.bat"
...
Pragma AutorunFinalizeSection
...
ShellExec /SW_HIDE "%COMMANDER_PATH%\utils\StopDummy.bat" |
cmd, nircmd, pathpid (самописная утилита которая выдаёт в stdout/stderr pid первого процесса с путём из параметра запуска)
Dummy.exe запустится только с первым экземпляром тотала и закроется с последним, имея ввиду только тоталы и запускаемую программу расположенные в конкретных папках, игнорируя иные экземпляры запущенные из других мест |
|
Back to top |
|
|
|
|
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
|