Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Fri May 29, 2026 13:06    Post subject: Reply with quote

FallenAngel wrote:
Понаблюдаю.

Если ТС сам закрывается (на что может указывать запись в логе), это плохо. С чего бы ему самому закрываться? Если только скрипт какой-то чудит ... А monkey business от маестро хорошо известен: клик по невидимой кнопке (окну) триала приводит к описанному вами явлению.
FallenAngel wrote:
Нужно понять, это глобальный баг или что-то частное.

Больше похоже на первое, чем на второе. Судя из описания, скрипт меняет %Path% на уровне пользователя
Code:
pathman.ps1. Добавляет \ удаляет каталог в пользовательскую переменную %PATH%. Поддерживает пакетный режим.

А это приводит к отправке сообщения WM_SETTINGCHANGE
Quote:
Когда вы нажимаете «ОК» в системном диалоговом окне переменных сред, Windows отправляет специальное широковещательное сообщение WM_SETTINGCHANGE всем открытым окнам [1]. Некоторые среды разработки (IDE), продвинутые эмуляторы терминалов (например, VS Code, Fleet, или некоторые плагины для Windows Terminal) перехватывают это сообщение [1]. Вместо того чтобы просто проигнорировать его, они пытаются «помочь» пользователю: динамически перечитывают актуальные переменные из реестра и полностью перезаписывают ими текущий %PATH% вашего процесса.В результате все временные пути, которые вы добавляли локально внутри процесса (например, через скрипты или код), бесследно стираются.

Судя по всему, тотал перехватывает сообщение WM_SETTINGCHANGE и заново перечитывает переменные окружения, что приводит к сбросу изменений, сделанных через Autorun.

Проверить можно
Code:
# WM_WININICHANGE
SetMessageAction /P 0x001A "WinIniCallback"   

Func WinIniCallback(hWnd, uMsg, wParam, lParam)
    MsgBox(GetEnv("path"), "WM_WININICHANGE", 48+4096)
    If lParam <> 0 Then SendMessage(AUTORUN_TCHANDLE, 0x001A, 0, 0)
EndFunc

Сначала приходит системное сообщение (пути еще не успели измениться тоталом). Второе сообщение отсылает сам Autorun — пути сброшены.

Не знаю, что вам с этим делать. Наверное, можно отказаться пока от скрипта, это самый простой вариант. Добавлять нужные пути только через Autorun Smile
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group