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

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

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

В общем, ещё раз прошу проверить с новой версией, по той же ссылке. Если и сейчас не прояснится, то видимо придется исправлять последствие, а выяснение глубинной причины отложить до момента, когда я смогу это повторить.

Добавлено: Чт авг 07, 2025 12:00
AkulaBig
Loopback
На всякий случай норм тоже прикладываю:
Изображение
Изображение
Сейчас еще при запуске ТС инфа стала появляться. Надо ее скрин? Там все норм.

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

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

Да, и еще: вы разные тесты случайно делаете не с перезапуском RestartScript?

Добавлено: Чт авг 07, 2025 13:15
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)

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

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

Loopback
Нет, больше найти место для этого косяка не удалось. В остальных случая хорошая ошибка появляется.

Добавлено: Чт авг 07, 2025 19:56
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)
Так что нужно просто использовать либо один, либо другой синтаксис для записи целиком.

Добавлено: Чт авг 07, 2025 20:42
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 нормальное окно, второе - за пределами экрана. Конечно я их по очереди писал, не вместе.

Добавлено: Чт авг 07, 2025 21:45
Loopback
AkulaBig писал(а): А перед ним в других файлах сотни и тысячи строк. Может вам проще сборку скачать?
Кстати да, согласен, так и сделаю, завтра скачаю, посмотрю. Может и ошибку словлю.

Добавлено: Пт авг 08, 2025 05:32
AkulaBig
Loopback
Тестовая версия: https://www.dropbox.com/scl/fi/aqer518l ... 3u9g7&dl=0
Рабочую я уже переделал.

Добавлено: Пт авг 08, 2025 11:56
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]

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

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

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

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

Оказывается теперь просто весь мой код не работает. Буду разбираться.

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

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

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

Добавлено: Сб авг 09, 2025 10:03
AkulaBig
Loopback
Подозреваю в этом проблема:
Изображение
У меня ведь все инишки в юникоде. Иначе ранее не работало.