Autorun

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

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

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

Сообщение AkulaBig »

Loopback писал(а):такое на обеих разрядностях?
Да. Только в ТС32 нет знака вопроса в Class.
Loopback писал(а):в случае нормального выполнения, в строке Class: показывается "TTOTAL_CMD"?
Да:
Изображение
Loopback писал(а):вроде как проблемы автозакрытия окна никогда на 32-битном тотале не было.
Забыл спросить. Ничего не понятно. Окно ошибки должно автозакрываться даже не дав мне прочитав его? Раньше я его закрывал сам.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а): Окно ошибки должно автозакрываться даже не дав мне прочитав его?
Нет, конечно, имеется в виду тот баг в x64, из-за чего окно самозакрывается едва открывшись.

В общем, ещё раз прошу проверить с новой версией, по той же ссылке. Если и сейчас не прояснится, то видимо придется исправлять последствие, а выяснение глубинной причины отложить до момента, когда я смогу это повторить.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback
На всякий случай норм тоже прикладываю:
Изображение
Изображение
Сейчас еще при запуске ТС инфа стала появляться. Надо ее скрин? Там все норм.

Добавлено спустя 3 минуты:
Loopback писал(а):Нет, конечно, имеется в виду тот баг в x64, из-за чего окно самозакрывается едва открывшись.
Понятно. У меня не автозакрывалось окно, если наг-скрин не появлялся. А сейчас на обоих разрядностях автозакрывается.
А попробую-ка я любимую ошибку воспроизвести. Знак процента прилепить. Точно помню, окно себя правильно вело при этой ошибке.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а):Сейчас еще при запуске ТС инфа стала появляться. Надо ее скрин?
Да, данные инициализации тоже нужно для случая, когда проблема проявляется. Лучше всего если получится вся информация на одном скрине, как на первом.

Да, и еще: вы разные тесты случайно делаете не с перезапуском RestartScript?
yahuu
Сообщения: 40
Зарегистрирован: Чт июн 22, 2023 07:32

Сообщение yahuu »

Почему только первый является действительным?

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

SetHotkeyAction /K:A /H:F ShowPopupMenu %COMMANDER_PATH%\User\Files.BAR 500 600
SetHotkeyAction /K:A /H:F ShowPopupMenu(Set(%COMMANDER_PATH%"\User\Files.BAR"),500,600)
SetHotkeyAction /K:A /H:F ShowPopupMenu(COMMANDER_PATH & '\User\Files.BAR',500,600)
SetHotkeyAction /K:A /H:F ShowPopupMenu(COMMANDER_PATH & "\User\Files.BAR",500,600)
str = COMMANDER_PATH & "\User\Files.BAR"
SetHotkeyAction /K:A /H:F ShowPopupMenu(str,500,600)
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):вся информация на одном скрине, как на первом.
Изображение
Loopback писал(а):вы разные тесты случайно делаете не с перезапуском RestartScript?
Я вот и хотел написать. Эта ошибка у меня прописана при переключении языка. В ходе которого я делаю перезагрузку. Так что данные инициализации навряд-ли интересны. Попробую в основном autorun.cfg прописать.
Ну и вот реакция на нормальную ошибку:
Изображение
Как видите, окно не исчезает. И показывается в правильном положении. И все это в ТС64!

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

Loopback
Нет, больше найти место для этого косяка не удалось. В остальных случая хорошая ошибка появляется.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig
Спасибо за тесты. В всяком случае уже видно, что изначально найденный хэндл окна ТС проходит тест, и, если дать возможность скрипту выполниться до конца, то и в конце тест тоже успешно проходится. Ошибка возникает только в оконной функции диалога, значит невалидным хэндл становится непосредственно до вызова этого диалога. Есть подозрение, что какая-то функция незадолго до места, где возникает "плохая" ошибка, лезет куда-то не туда и что-то портит. Это, кстати, бьется с вашим наблюдениями
AkulaBig писал(а):То-есть написал я строке 111. Появилось сообщение об ошибке. Написал 111 на 15-20 строк ниже. Окно сообщения об ошибке стало появляться в верхнем левом углу экрана
AkulaBig писал(а):Нет, больше найти место для этого косяка не удалось. В остальных случая хорошая ошибка появляется.
Хорошо бы посмотреть эти 15-20 строк перед "плохой" ошибкой.
AkulaBig писал(а): Так что данные инициализации навряд-ли интересны.
Очень даже интересны, при инициализации получаем хэндл окна тотала.

yahuu писал(а):Почему только первый является действительным?
Во втором и остальных случаях вы смешиваете командный синтаксис с функциональным.

Функция здесь только одна - SetHotkeyAction, со своими параметрами. ShowPopupMenu здесь - это не функция как таковая, а строка с именем функции. Это (не считая переключателей) - первый параметр функции SetHotkeyAction. Все параметры после имени функции (%COMMANDER_PATH%\User\Files.BAR 500 600) - это тоже параметры SetHotkeyAction, второй, третий и четвертый. При нажатии комбинации клавиш будет вызвана функция ShowPopupMenu и ей будут переданы эти параметры.

Это частая ошибка. Для лучшего понимания первую запись можно записать так (обратите внимание на кавычки вокруг ShowPopupMenu, это просто строка):

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

SetHotkeyAction /K:A /H:F "ShowPopupMenu" "%COMMANDER_PATH%\User\Files.BAR" "500" "600"
Еще лучше это видно в функциональной записи:

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

SetHotkeyAction("~/K:A /H:F", "ShowPopupMenu", COMMANDER_PATH & "\User\Files.BAR", 500, 600)
Так что нужно просто использовать либо один, либо другой синтаксис для записи целиком.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):Хорошо бы посмотреть эти 15-20 строк перед "плохой" ошибкой.
Дак это только в одном из файлов *.aucfg. А перед ним в других файлах сотни и тысячи строк. Может вам проще сборку скачать?

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

Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\CharDetect.aucfg
# Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\ControlID.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\CustomFields.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\IcoNumber.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\Restart.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchAssoc.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchColor.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchDrivesIcon.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchFilesIcon.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchIniSect.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchLang.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchSound.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchTitleInfo.aucfg
Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\SwitchTypeHints.aucfg
Вот такой список файлов. Ошибку тестирую в SwitchLang.aucfg в функции работы с потоком. Но не факт, что где-то в другом месте это не сработает.
А так вот этот кусок:

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

123
		Local Buttonbar = IniRead(ini_Buttonbar, "Buttonbar", "Buttonbar", "")
		Local ButtonbarVertical = IniRead(ini_ButtonbarVertical, "ButtonbarVertical", "Buttonbar", "")
		SwitchIniSect(Set(Buttonbar), sect_Buttonbar, lng)
		SwitchIniSect(Set(ButtonbarVertical), sect_Buttonbar, lng)
		SwitchIniSect(ini_Colors, sect_Colors, lng)
		If FileExist(ini_Colors0) Then
			SwitchIniSect(ini_Colors0, sect_Colors, lng)
		EndIf
		If FileExist(ini_Colors1) Then
			SwitchIniSect(ini_Colors1, sect_Colors, lng)
		EndIf
		If FileExist(ini_Colors2) Then
			SwitchIniSect(ini_Colors2, sect_Colors, lng)
		EndIf
		If FileExist(ini_Colors3) Then
			SwitchIniSect(ini_Colors3, sect_Colors, lng)
		EndIf
		If FileExist(ini_Colors4) Then
			SwitchIniSect(ini_Colors4, sect_Colors, lng)
		EndIf
		If FileExist(ini_Colors5) Then
			SwitchIniSect(ini_Colors5, sect_Colors, lng)
		EndIf
		SwitchIniSect(ini_CustomFields, sect_CustomFields, lng)
		SwitchIniSect(ini_DirMenu, sect_DirMenu, lng)
		SwitchIniSect(ini_FileSystemPlugins, sect_FileSystemPlugins, lng)
		SwitchIniSect(ini_FileSystemPlugins, sect_FileSystemPlugins64, lng)
		SwitchIniSect(ini_HintsCustomField, sect_HintsCustomField, lng)
		SwitchIniSect(ini_ListerModes, sect_ListerModes, lng)
		SwitchIniSect(ini_Searches, sect_Searches, lng)
		SwitchIniSect(ini_User, sect_User, lng)
		SwitchIniSect(ini_ToolsBar, sect_Buttonbar, lng)
		SwitchIniSect(ini_UserBar, sect_Buttonbar, lng)
123
Первая 123 нормальное окно, второе - за пределами экрана. Конечно я их по очереди писал, не вместе.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а): А перед ним в других файлах сотни и тысячи строк. Может вам проще сборку скачать?
Кстати да, согласен, так и сделаю, завтра скачаю, посмотрю. Может и ошибку словлю.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback
Тестовая версия: https://www.dropbox.com/scl/fi/aqer518l ... 3u9g7&dl=0
Рабочую я уже переделал.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig
Скачал, проверил, попереставлял в разные места. По-прежнему ничего не проявляется, это было бы слишком просто.

Вроде не вижу ничего критичного в предшествующих строках, кроме функции SwitchIniSect, которая вызывается множество раз, при этом использует DllCall/Buffer, потенциально наиболее "опасные" функции. В принципе из явных ошибок там только то, что buf не освобождается функцией Free, нужно добавить

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

Local out = buf.GetStr(0, bytes)
Free(buf)
Но это вряд ли могло повлиять. Я бы проверил с вариантом без DllCall/Buffer, изменится ли что-нибудь. Переделал SwitchIniSect на встроенном функционале, попробуйте у себя.

[cut]

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

Func SwitchIniSect(sIni, sSect, sLng)

	# Поддерживаемые языки
	# Supported languages
	Local arrLang = List("eng", "rus")
	Local arrFile = List()
	Local i = 0

	arrFile.LoadFromFile(sIni)
    
	Local out = arrFile.Text

	# Проверяем количество языковых секций в файле по шаблону [$sSect
	# Check number of language sections in file according to template [$ ssect
	Local count = 0
	For i = 0 To arrFile.Count-1
		If StrPos(arrFile._Item[i], "[" & sSect) > 0 Then
			count += 1
		EndIf
	Next

	# Если в файле только одна секция по шаблону [$sSect, завершаем выполнение
	# скрипта
	# If file has only one section on template [$ ssect, we complete execution
	# script
	If count <= 1 Then
		Free(arrLang)
		Free(arrFile)
		Exit
	Endif

	# Переименовываем все секции по шаблону [sect_lng]
	# Rename all sections according to template [sect_lng]
	For i = 0 To arrLang.Count-1
		If StrPos(out, "[" & sSect & "_" & arrLang._Item[i] & "]") = 0 Then
			out = StrReplace(out, "[" & sSect & "]", "[" & sSect & "_" & arrLang[i] & "]")
			Break
		EndIf
	Next
	
	# Переименовываем оригинальную секции по шаблону [sect]
	# Rename original section according to template [sect]
	If StrPos(out, "[" & sSect & "_" & sLng & "]") Then
		out = StrReplace(out, "[" & sSect & "_" & sLng & "]", "[" & sSect & "]")
	Endif
	
	arrFile.Text = out
	arrFile.SaveToFile(sIni)

	Free(arrLang)
	Free(arrFile)
EndFunc
[/cut]
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а): По-прежнему ничего не проявляется
Возможно Винда. У меня 24 со всеми обновлениями. А у вас?
Loopback писал(а):buf не освобождается функцией Free, нужно добавить
Понял, спасибо.
Loopback писал(а):попробуйте у себя
Попробую, отпишусь.
Loopback писал(а):Переделал SwitchIniSect на встроенном функционале
Это этапы развития Autorun. На тот момент только так можно было. Поэтому у меня не мало кусков, где одни и те-же задачи решаются разным кодом. Я выше писал, что оф 2.1 у меня уже не работает.

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

Loopback
Быстро не получится протестировать. Буфер у меня в двух местах не освобождался. Прописал фри. Ничего не изменилось. Потом скопипастил вашу функция не глядя. Ошибка исчезла вообще. Но настройки сборки очень сильно множественно пострадали. Теперь мне надо разбираться с функцией.

Добавлено спустя 4 минуты:

Оказывается теперь просто весь мой код не работает. Буду разбираться.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

AkulaBig писал(а): А у вас?
23H2, хотя не думаю, что это имеет большое значение. Я ее только для тестов иногда использовал. Попробую обновить.
AkulaBig писал(а):Это этапы развития Autorun. На тот момент только так можно было.
Прекрасно понимаю. Помню мы что-то правили в этом коде. Как говорится, работает - не трогай :) Ну а с релизной 2.1 слишком много нового появилось.
AkulaBig писал(а):Оказывается теперь просто весь мой код не работает
Ну вот собственно и подтверждение. Формально-то я проверил, но все равно что-то пошло не так.

На самом деле вовсе необязательно менять имеющийся код. Просто хотелось проверить без рискованных функций и понять причину той странной ошибки.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback писал(а):23H2, хотя не думаю, что это имеет большое значение.
Имеет большое значение. В 24 огромные изменения. На других форумах мы с этим столкнулись. Например, другой движок джава. Еще что-то. Может и наша проблема из-за этого.
Loopback писал(а):На самом деле вовсе необязательно менять имеющийся код.
Разберемся, просто время нужно.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Loopback
Подозреваю в этом проблема:
Изображение
У меня ведь все инишки в юникоде. Иначе ранее не работало.
Ответить