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 

Autorun
Goto page Previous  1, 2, 3 ... 234, 235, 236
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 1155

Post (Separately) Posted: 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
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1155

Post (Separately) Posted: Fri May 29, 2026 20:04    Post subject: Reply with quote

FallenAngel
Проверил на таких командах в PowerShell
Code:
# Получаем текущий ПОЛЬЗОВАТЕЛЬСКИЙ Path из реестра
$oldUserPath = [Environment]::GetEnvironmentVariable("PATH", "User")

# Формируем новую строку, добавив ваш путь через точку с запятой
$newUserPath = "$oldUserPath;C:\MyFolder"

# Записываем обновленный список обратно в профиль пользователя
[Environment]::SetEnvironmentVariable("PATH", $newUserPath, "User")

Да, теперь точно можно сказать, что SetEnvironmentVariable служит триггером для WM_SETTINGCHANGE, на которое реагирует тотал. Можно, конечно, следить за этим из Autorun, но стоит ли. По-моему, проще совсем отказаться от SetEnv /A PATH и менять переменные окружения из ps1 скрипта.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 40

Post (Separately) Posted: Fri May 29, 2026 21:49    Post subject: Reply with quote

Orion9
Да, тут понимание пришло. Пока не знаю что "лучше", а что нет.
Надо обдумать.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1155

Post (Separately) Posted: Sat May 30, 2026 00:21    Post subject: Reply with quote

FallenAngel
Как-то сразу в голову не пришло, но оказывается, как говорил Вицин, все уже украдено придумано за нас )

 Hidden text

Не знаю, какую из этого можно извлечь пользу, но хоть что-то.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1155

Post (Separately) Posted: Sat May 30, 2026 23:37    Post subject: Reply with quote

AkulaBig
Кажется, теперь стало понятно, что за неприятные косяки у вас творились с переменными окружения. Причину вы нашли сами, инструкции Pragma Include действительно была ни при чем. Я проверил у себя. Консольная команда SetX тоже запускает WM_SETTINGCHANGE, как и команда PowerShell SetEnvironmentVariable. В результате строка в Autorun
Code:
ShellExec /SW_HIDE /WAIT %COMSPEC% '/c setx OIT_DATA_PATH "%COMMANDER_PATH%"'

приводит к сбросу переменных окружения.

В общем, это не баг. Фича, которой можно пользоваться.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 582

Post (Separately) Posted: Sun May 31, 2026 00:06    Post subject: Reply with quote

Orion9 wrote:
В общем, это не баг. Фича, которой можно пользоваться.

Понятно. Будем знать.
Я тут для swf сделал скрипт через ExifTool, чтобы еще от одного плагина уйти. В планах и другие расширения обработать. Дак вот. Я решил, что временные файлы должны иметь другое название, чтобы с документами не засекаться. А оказывается должны использовать для всех скриптом одни и те-же файлы. Иначе -stay_open не работает.
Сейчас думаю как еще одну проблему решить. И там и там использую дату создания, модификации файлов. И непонятно, как использовать дату в двух разных скриптах. Получается надо писать скрипт для общих данных что ли.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1155

Post (Separately) Posted: Sun May 31, 2026 00:22    Post subject: Reply with quote

AkulaBig wrote:
Понятно. Будем знать.

Да, можно просто переставить строчку с SetX в самое начало, чтобы она не рушила уже объявленные переменные, и вроде так должно работать. Правда надо еще посмотреть, что при перезапуске ТС будет происходить, но это уже другое дело.

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

AkulaBig wrote:
Получается надо писать скрипт для общих данных что ли.

Я бы и рад что-то по делу написать, но откуда мне это знать? Laughing

Юзайте ИИ, он ведь реально вывозит!
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 582

Post (Separately) Posted: Sun May 31, 2026 00:52    Post subject: Reply with quote

Orion9 wrote:
Я бы и рад что-то по делу написать, но откуда мне это знать?

Сделал уже. Отдельный скрипт для общих данных решил проблему. Собственно почему я здесь это пишу. Для Ауторан сами алгоритмы будут точно такими-же.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1155

Post (Separately) Posted: Sun May 31, 2026 11:57    Post subject: Reply with quote

AkulaBig wrote:
Для Ауторан сами алгоритмы будут точно такими-же.

Разумеется. Autorun это практически тот же Autohotkey или AutoIt, конечно алгоритмы будут такими же. При этом Autohotkey намного ближе по синтаксису, поэтому с него проще переводить код, полученный от ИИ.

Недели 2-3 назад я спрашивал у болвана за DllCall в Autorun, тогда он мне ответил, что Autorun его не поддерживает, но сейчас спросил и... Shocked

 плагин Autorun для Total Commander поддерживает DllCall?

Т.ч. двери открыты, дамы и господа! Mr. Green Но не всё так просто. На предложение перевести вот этот код с Autohotkey, он выкинул какой-то мусор:
Code:
 WriteLine(text) {
        rawString := text "`r`n"
        bufLen := StrPut(rawString, "UTF-8")
        buf := Buffer(bufLen, 0)
        StrPut(rawString, buf, "UTF-8")
       
        ; Отправляем байты напрямую в канал процесса через WinAPI WriteFile
        DllCall("WriteFile", "Ptr", this.hPipe, "Ptr", buf, "UInt", bufLen - 1, "UInt*", &bytesWritten := 0, "Ptr", 0)
    }

 Hidden text

Т.ч. увы — пока только на собственный драйвер руки.sys придётся расчитывать.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 582

Post (Separately) Posted: Sun May 31, 2026 12:44    Post subject: Reply with quote

Orion9
А у меня очередная проблема. Если после использования вид просмотра не переключить (то-есть, например из Документы в Краткий) и попытаться просмотреть другие пользовательские колонки, то они не показываются. Но общие колонки (у меня даты) показываются. Думал надо попробовать завершить процесс. Не помогло. Опять не знаю, что делать.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 234, 235, 236
Page 236 of 236

 
Jump to:  
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