Autorun

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

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

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

Сообщение AkulaBig »

Orion9
Вы у нас единственный остались на замену автору :) Кстати, не в курсе, куда он так надолго исчез?
Решил побаловаться с наг-скрином ТС. Теперь не надо применять дополнительные плагины. И работа не зависит от видеокарты и драйверов. Все известные плагины по нажиманию кнопок на наг-скрине глючат на определенных видеокартах и драйверах.

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

Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\NagScreen.aucfg

# NagScreen.aucfg
# ================================	Описание	================================
# Нажимает кнопку на наг-скрине.
# =================================	Примеры	================================
# Для использования скрипта в плагине Total Commander Autorun, необходимо
# включить NagScreen.aucfg в файл autorun.cfg:
# Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\NagScreen.aucfg
# ==============================================================================

# ==============================	Description	===============================
# Presses a button on the nagscreen.
# =================================	Example	================================
# To use script in plugin Total Commander Autorun, it is possible enable
# NagScreen.aucfg:
# Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\NagScreen.aucfg
# ==============================================================================

Local hWnd, nTimeOut = 2000
While nTimeOut > 0
	If FileExist(COMMANDER_PATH & "\wincmd.key") Then
		Break
	EndIf
	# Находим окно наг-скрина
	# Find the nagscreen window
	hNagScreen = WinFind(WinFind(WinFind(WinFind(WinFind(0, 'TNASTYNAGSCREEN'), _
		auX64 ? "Window" : "TNotebook"), _
		auX64 ? "Window" : "TPage"), _
		auX64 ? "Window" : "TPanel"), _
		auX64 ? "Window" : "TPanel")
	If hNagScreen > 0 Then
		# Определяем хэндлы кнопок для закрытия окна наг-скрина
		# Define button handles for closing the nagscreen window
		hButton3 = DllCall("GetWindow", "hwnd", hNagScreen, "uint", 2, "hwnd")
		hButton2 = DllCall("GetWindow", "hwnd", hButton3, "uint", 2, "hwnd")
		hButton1 = DllCall("GetWindow", "hwnd", hButton2, "uint", 2, "hwnd")
		
		# Имитация клика ЛКМ
		# Simulate LMB click
		BM_CLICK = 245
		
		# Нажимаем кнопку для закрытия окна наг-скрина
		# Press the button to close the nagscreen window
		Switch WinGetText(hNagScreen)
			Case '3'
				
				SendMessage(hButton3, BM_CLICK, 0, 0)
			Case '2'
				SendMessage(hButton2, BM_CLICK, 0, 0)
			Case '1'
				SendMessage(hButton1, BM_CLICK, 0, 0)
		EndSwitch
		Break
	EndIf
	Sleep(50)
	nTimeOut -= 50
Wend
Чтобы не плодить сообщения, вставил в этот пост правильный код.
Последний раз редактировалось AkulaBig Пт фев 20, 2026 15:53, всего редактировалось 4 раза.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig
Кликает, проверил. Рабочее решение )

Может быть где-то дописать, что код желательно вставлять пораньше? У меня, например, несколько модулей, я вставил его в модуль Test.aucfg, который распологается ближе к концу. В результате окно заметно мелькает.

А разве наг-скрин появляется только один раз при старте? Раньше, помню, это окно могло доставать и во время копипования. Неужто Гислер совсем раздобрел к старости? )
Кстати, не в курсе, куда он так надолго исчез?
Вероятно готовится восстать как... FileZilla :)

Шутки шутками, хотел еще описание к Torrent.aucfg успеть сделать, как когда-то обещал, но времени что-то совсем в обрез получается. И все-таки надо добить, пока взялся и есть какое-то настроение...
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Может быть где-то дописать, что код желательно вставлять пораньше?
С местом вставки очень интересная ситуация. Я начал писать после запуска всех модулей. Как-будто почуял, где надо. После написания попробовал вставить после загрузки библиотек. Не работает! Не понимаю, почему. Так что кто заинтересуется, прочитает этот пост и сам попытается найти место, где код будет работать.
Orion9 писал(а): В результате окно заметно мелькает.
Ну мы с вами знаем, что можно попытаться убрать мелькание. Но я именно специально не стал ничего делать. Хочу, чтобы мелькало. Не хочется Гислера обижать. Хоть в этом ничего противозаконного и нет.
Orion9 писал(а):Раньше, помню, это окно могло доставать и во время копипования.
Припоминаю, что вроде было такое. Давно уже нет.
Orion9 писал(а):времени что-то совсем в обрез получается
Хорошо при Брежневе было, ни компютера, ни инета. По трое кед за лето рвал на футбольном поле. После беганья, прыганья, скаканья, когда становилось темно, книжка в руках. О нехватке времени даже не задумывались. А сейчас все время тратим фиг знает на что :)
А про вариант следующего окна через Autorun ничего не скажете? Что-то у меня есть смутные подозрения, что по возможности лучше делать через Autorun, чем через DllCall. Недавно столкнулся с одной ошибочкой с DllCall и стало интересно, а как это будет работать через Autorun. Сейчас уже этот функционал есть. Но проверить руки не доходят.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Не работает! Не понимаю, почему.
Возможно, окно просто не успевает появляться. Поэтому WinFind ничего не возвращает и ничего не работает. По той же причине я поставил вашу функцию в самый конец, т.е. после всех Pragma Include.

Я там исправил английский комметарий, если не возврожаете, а то получился "naked screen" после перевода :) Если делать софтовый перевод, желательно еще раз прогонять текст в обратную сторону, чтобы не было явных косяков.
AkulaBig писал(а):Не хочется Гислера обижать.
Согласен. Когда окно триала немного задерживается при запуске, даже лучше, во всех смыслах. Ежедневно с таким сталкиваться, конечно, я вряд ли бы согласился, но для сборки самое то.
AkulaBig писал(а):Припоминаю, что вроде было такое. Давно уже нет.
Это радует. А то я как-то давно с триальной версией не работал.
AkulaBig писал(а):Что-то у меня есть смутные подозрения, что по возможности лучше делать через Autorun, чем через DllCall.
Помню, сталкивался с таким. Не всё получится вызвать через DllCall. Но вы нашли рабочее решение, поздравляю. Теперь я тоже его использую в сборке :)

Ну, и как полагается, сделал таки описание на модуль Torrent.aucfg. Да, далеко не всем нужен подобный функционал, но все-таки приятно иметь его под рукой, если потребуется:
[cut]Модуль Torrent.aucfg предназначен для локального поиска торрент-файлов и торрент-данных. Важно! Для работы модуля требуется последняя версия TCTorrent с поддержкой интерфейса для получения данных торрент файла:
https://forum.wincmd.ru/viewpost.php?p=140436

Модуль использует утилиту Everything (версии 1.4.1 или выше). В настройках Everything необходимо включить индексацию размеров файлов и папок: Сервис -> Настройки -> Индексирование.

Поиск работает в обе стороны: 1) поиск торрент-данных по торрент-файлу; 2) поиск торрент-файла по торрент-данным.

Можно искать как файлы, так и папки.

При поиске торрент-данных есть возможность сохранить найденные пути в текстовый файл или сразу перейти к первому найденному пути при нажатии "Нет". Текстовый файл сохраняется с тем же именем, что и торрент-файл. Находясь на полученном текстовом файле, можно выполнить команду с кодом 70502 — первый путь в файле откроется на противоположной панели.

Другие коды команд.

70500 - Поиск торрент-данных по размеру
70501 - Поиск торрент-данных по размеру с использованием Everything

70500 с модификатором Shift вызывает окно с полем редактирования, где указывается на каких дисках будет производится поиск. Строка сохраняется в wincmd.ini в секцию Autorun:

[Autorun]
TorrentDrives=e:\;f:\;g:\;i:\;j:\

Для обоих команд действует модификатор CapsLock. При включеном CapsLock начало поиска и переход к данным будет происходить автоматически без отображения диалоговых окон. Такое поведение можно зафиксировать в глобальной переменной gCapsReverse, где gCapsReverse = 1 включает обратное поведение CapsLock.

70503 - Запускает или закрывает приложение Everything

Путь к приложению указывается в заголовке модуля в переменной gEvPath. Переменные gEvAuto и gEvDelay отвечают за автозапуск приложения и задержку перед запуском при операциях поиска.

70504 - Поиск частично закаченных данных (раздач).

При поиске частично закаченных данных действуют модификаторы Ctrl и Shift. Вызов команды без модификаторов запускает поиск по именам и размерам файлов в раздаче (перебираются файлы в .torrent файле). Ctrl - Только по именам файлов. Shift - Только по размерам.

70505 - Подсчёт размера .torrent файлов. Работает с выделенными на панели файлами.

Команды 70506 и 70507 используются для отладки. Alt+Win+0 включает режим отладки, Alt+0 выводит информацию на экран и копирует ее в буфер. Отладка доступна только для кода 70504, сами комбинации прописаны в модуль через SetHotkeyAction.

70508 - Тест для проверки устойчивости
70509 - Поиск торрент-файлов по торрент-данным

Для поиска торрент-файлов необходимо создать текстовый файл %COMMANDER_PATH%\Ini\Torrent.txt, где будут перечислены пути поиска. Например:

d:\Portable\uTorrent\torrents
d:\Temp\Test
d:\Temp
d:\Temp\Software
d:\Test\TorrentData

Глубина каталогов при поиске не учитывается, поэтому пути к файлам .torrent должны быть перечислены в этом файле отдельно для каждой папки.

Также в модуле действует комбинация Alt+Win+T. Комбинация Alt+Win+T показывает подсказку о последнем запущенном .torrent файле и копирует в буфер ссылку из полей "PublisherURL" или "Comment".

Все коды команд можно использовать в кнопках, но для ускорения работы можно создать специальные em_команды и назначить горячие клавиши. Как пример использования:

usercmd.ini:

[em_torrent_data_search]
cmd=70500

[em_torrent_data_everything]
cmd=70501

[em_torrent_data_goto_txt]
cmd=70502

[em_torrent_data_name_size]
cmd=70504

[em_torrent_data_options]
cmd=70506

[em_torrent_data_dbginfo]
cmd=70507

[em_torrents_search]
cmd=70509

[em_torrents_goto]
cmd=cm_FocusTrg,em_commander_cd

[em_commander_cd_param]
cmd=CD
param=?%A0

[em_commander_cd]
cmd=CD %COMMANDER_GOTO%

[em_everything]
cmd=%COMMANDER_PATH%\Utilites\Everything\Everything.exe
param=-startup

[em_everything_exit]
cmd=%COMMANDER_PATH%\Utilites\Everything\Everything.exe
param=-exit

[em_everything_toggle]
cmd=70503

Wincmd.ini:

[Shortcuts]
A+T=em_torrent_data_search
A+E=em_torrent_data_everything
A+N=em_torrent_data_name_size
CA+N=em_torrent_data_name_size
SA+N=em_torrent_data_name_size
A+P=em_torrent_data_goto_txt
A+M=em_torrents_search
CA+M=em_torrents_search
CA+E=em_everything_toggle[/cut]
Да, было бы неплохо на каждый модуль сделать такое описание, как и предлогал FallenAngel, но где ж взять столько времени, сил и вдохновения? :)

Со временем, может, и сделаю. А пока собрал все скрипты по этой ссылке, пусть полежат, отдохнут немного ) [Зеркало]

P.s. Я там добавил возможность переключения заголовка на InfoHeader. Если запустить тотал и удерживать CTRL, то вместо Title.aucfg запустится InfoHeader.aucfg. Удобно для тестов.

И да. Скрипты распространяются по лицензии "Республика Шкид", каждый в праве делать с ними все, что хочет, применение в собственных целях толлько приветствуется!
Последний раз редактировалось Orion9 Сб фев 14, 2026 18:40, всего редактировалось 1 раз.
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

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

SetEnv /A PATH ';%COMMANDER_PATH%\Utils' 
У меня одного это работает криво? В папке есть nircmd.exe и он периодически "забывает" про его путь.


AkulaBig писал(а): Закрываем наг-скрин.
Может кому-то пригодится.
Вставил в начало autorun.cfg. Наг-скрин не закрывается.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):получился "naked screen" после перевода
Ну да :)
Сейчас все оформил. В вызовах пояснил про место расположения. Вынес в отдельный модуль. На руборде попросили.
Orion9 писал(а):Ежедневно с таким сталкиваться, конечно, я вряд ли бы согласился, но для сборки самое то.
У меня никакого дискомфорта мелькание не вызывает.
Orion9 писал(а):Теперь я тоже его использую в сборке
Значит не зря мозги напрягал :)
FallenAngel писал(а):У меня одного это работает криво?
Не проверял, но точка с запятой непонятно, что там делает.
FallenAngel писал(а):Вставил в начало autorun.cfg. Наг-скрин не закрывается.
Да, надо в конец прописывать. В сборке все это оформил и прописал.

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

Отредактировал сообщение с кодом.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):У меня никакого дискомфорта мелькание не вызывает.
Ну там не только в мелькании дело. Тотал можно открыть и весь день не закрывать, а вот кричащее "НЕ ЗАРЕГИСТРИРОВАНО" из заголовка никуда не денешь. Правда придраться будет не к чему )
AkulaBig писал(а):Да, надо в конец прописывать. В сборке все это оформил и прописал.
Можно в начало модуля добавить Sleep(200) или Sleep(300) для верности. Так сейчас сделано в InfoHeader.aucfg и Title.aucfg примерно по той же причине. Autorun начинает выполняться раньше, чем тотал формирует текст заголовка, если не поставить задержку, текст может оказаться не полным или неправильным.
https://forum.wincmd.ru/viewpost.php?p=137138

Но есть еще один вариант — использовать цикл ожидания. Т.е. запустить цикл и проверять каждые 50-100 миллисекунд существование окна. Если окно появится, послать нажатие. Если не появится, нужно предусмотреть выход из цикла по таймауту, 3-5 секунд. Например:

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

Local hWnd, nTimeOut = 3000
While nTimeOut > 0
    hWnd = WinFind(0, "TNASTYNAGSCREEN")
    If hWnd > 0 Then           
       Break
    EndIf
    Sleep(50)
    nTimeOut -= 50
Wend
    
If hWnd > 0 Then... # клик 
Если хэндл окна будет найден, клик точно должен быть не в пустоту :) Хотя гарантий тоже, наверное, нет. Надо на практике проверять.
FallenAngel писал(а):В папке есть nircmd.exe и он периодически "забывает" про его путь.
А что в этот момент в переменных окружения? Желательно посмотреть в консоли или плагине Environment Variables, без этого трудно сказать. У вас вроде бы все правильно записано.

Добавил зеркало на архив со скриптами (посте выше). Все-таки Upload.ee не работает без бубнов пока, и это печально.
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

AkulaBig
Ну когда модулем оформлено да еще и с нормальным описанием - тогда да, все ОК. 8)

Медленней конечно чем с dll, лучше ловить циклом как Orion9 предлагает.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):"НЕ ЗАРЕГИСТРИРОВАНО" из заголовка никуда не денешь
А, понял. Дак это давно уже у меня так. Я ведь применял плагин для Авторана, прибивающий наг-скрин. С Гислером периодически приходится общаться и хочу, чтобы на моих скринах был легитимный ТС. И у меня-же в сборке нет вареза. Ну практически. Есть вопрос к инонкам.
Кстати, а вы в курсе, что сейчас ТС для России бесплатен? То-есть оплата временно не принимается и можно пользоваться демо-версией сколько угодно?
Orion9 писал(а):Но есть еще один вариант
Пока у всех тестировщиков работает, поэтому не стал делать задержки. Если понадобится, конечно сделаю.
Хотя вариант с циклом ведь никакой задержки не делает. Наверное сделаю для верности. Так что мелькание можно попробовать убрать, но не хочу.
Orion9 писал(а):У вас вроде бы все правильно записано.
А как-же точка с запятой?
FallenAngel писал(а):Медленней конечно чем с dll, лучше ловить циклом как Orion9 предлагает.
Да не, просто я специально не стал убирать мелькание. Это решает вопрос с легитимностью.
FallenAngel писал(а):Ну когда модулем оформлено да еще и с нормальным описанием - тогда да, все ОК.
Приучил я уже своих пользователей к такому оформлению :) На руборде вообще написали, что без этого не могут кодом воспользоваться. Да и мне самому удобно так оформлять.

Добавлено спустя 22 минуты:
Orion9 писал(а):sa
Решение действительно рабочее, спасибо за вашу смекалку - избавили от лишней головной боли :D Видимо, Autorun получает текст заголовка раньше, чем Тотал его окончательно выстраивает, поэтому небольшое ожидание здесь как никогда уместно.
А вот проблему с назначением переменной для библиотек Оракла # SetEnv OIT_DATA_PATH %COMMANDER_PATH%\Plugins\wlx\uLister решить не удается. Она должна создаться до запуска ТС.

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

Orion9
FallenAngel
Еще раз поправил код. Сделал через цикл. Теперь вызов работает из любого места autorun.cfg.
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

AkulaBig писал(а): Еще раз поправил код. Сделал через цикл. Теперь вызов работает из любого места autorun.cfg.
Если сразу после запуска начать куда-то кликать \ нажимать хоткеи то ТС сразу закрывается.
Если подождать несколько секунд, ничего не делая после запуска, то дальше все ОК.

Возможно, дело в:
Sleep(50)
nTimeOut -= 50

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

Сообщение AkulaBig »

FallenAngel писал(а):Возможно, дело в:
Sleep(50)
nTimeOut -= 50
Скорей всего. Задержи большие. Может попозже потестю.
FallenAngel писал(а):Если сразу после запуска начать куда-то кликать \ нажимать хоткеи то ТС сразу закрывается.
Какие хоткеи? Я ими не пользуюсь, поэтому даже предположить не могу, что надо надавить сразу после запуска ТС. Напишите конкретные, потестю.
FallenAngel
Сообщения: 47
Зарегистрирован: Вт дек 30, 2025 20:01

Сообщение FallenAngel »

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

   Sleep(100)
   nTimeOut -= 100
Похоже, что если так увеличить, то все ОК.



Можно хоткеи не жать и просто основное меню (Files, Mark, ...) попытаться вызвать.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

FallenAngel писал(а):Можно хоткеи не жать и просто основное меню (Files, Mark, ...) попытаться вызвать.
У меня все нормально. ТС не падает.
FallenAngel писал(а):Похоже, что если так увеличить, то все ОК.
Ну вот поэтому я не очень хотел вводить цикл. Появилась зависимость от производительности компа. Вообще спасибо за тестирование. Может у кого-то еще будет с этим проблема.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Кстати, а вы в курсе, что сейчас ТС для России бесплатен? То-есть оплата временно не принимается и можно пользоваться демо-версией сколько угодно?
Сколько угодно? А где об этом сказано в этой фразе?

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

Due to EU sanctions we cannot currently handle orders from Russia. Please use the demo version for now until the situation improves. Sorry for the inconvenience.
AkulaBig писал(а):А как-же точка с запятой?
Так того требует переменная %Path%. Запись должна работать:

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

SetEnv /A PATH ";%COMMANDER_PATH%\Utilites\Sysinternals;%COMMANDER_PATH%\Scripts\Ahk"
Может с правами что-то не так, или еще чкго. Нужно больше информации.
AkulaBig писал(а):А вот проблему с назначением переменной для библиотек Оракла # SetEnv OIT_DATA_PATH %COMMANDER_PATH%\Plugins\wlx\uLister решить не удается. Она должна создаться до запуска ТС.
Вы же решили вроде эту проблему :)
AkulaBig писал(а):Сделал через цикл. Теперь вызов работает из любого места autorun.cfg.
По идее должен работать, но есть нюансы. Если поставить в начало autorun.cfg, то код расположенный ниже не будет выполнен, пока цикл не прервется или не закончится по таймауту. Чтобы этого избежать, можно запустить цикл в отдельном потоке. Также нужно предусмотреть случай, когда пользователь использует лицензию при работе с ТС — вряд ли лишний цикл ожидания ему будет нужен.
В общем, как всегда: гладко только на бумаге...
FallenAngel писал(а):Возможно, дело в:
Sleep(50)
nTimeOut -= 50
Это не должно никак влиять. Нужно разобраться, падает ли тотал в действительности или просто закрывается из-за неверно нажатой кнопки. Посмотрите в журнале Windows ошибки приложений. Если есть запись:

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

Имя сбойного приложения: TOTALCMD64.EXE, версия: 11.56.0.0, метка времени: 0x00000000
Имя сбойного модуля: Autorun.wdx64, версия: 2.2.21.3, метка времени: 0x6569ee67
Тогда можно говорить об ошибках в Autorun. В противном случае, проблему нужно искать в коде.
AkulaBig
Сообщения: 639
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Сколько угодно?
Ага.
Orion9 писал(а):Так того требует переменная %Path%
Это-же не системная переменная, а локальная. У ней свой синтаксис может быть. Первая точка с запятой явно не нужны. Ведь эта переменная НЕ добавляется к системной.
Orion9 писал(а):Вы же решили вроде эту проблему
Не, нет решения.
Orion9 писал(а):пользователь использует лицензию при работе с ТС
Я это проверил.
Ответить