Autorun
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 133, 134, 135, 136, 137  Next  :| |:
Total Commander -> Плагины Total Commander

#1996:  Author: jentoso PostPosted: Fri Apr 19, 2024 12:28
    —
Что-то не могу с простым действием разобраться.
Проверяю значение ключа в INI, если не соответствует надо записать, а при совпадении ничего не выполнять.
Code:
IniRead OCRPATH "%COMMANDER_PATH%\Utils\IrfanView\i_view32.ini" "OCR" "TS_EXE" ""
if %OCRPATH% <> "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\" Then
IniWrite "%COMMANDER_PATH%\Utils\IrfanView\i_view32.ini" "OCR" "TS_EXE" "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\"
Endif

Что не так делаю?

#1997:  Author: Loopback PostPosted: Fri Apr 19, 2024 13:18
    —
jentoso
Это баг с <> для строк в последней версии, в рабочей уже исправлен. А пока можно переписать условие так:

Code:

if not (%OCRPATH% = "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\") Then

#1998:  Author: jentoso PostPosted: Fri Apr 19, 2024 14:22
    —
Loopback
Вроде "рабочая" еще не выкладывалась?
По поводу проверки ключа, теперь срабатывает, но не понятен следующий момент. Если значение ключа в INI совпадает, значит и недолжна срабатывать команда IniWrite. Тогда почему в свойстве самого INI файла видна дата и время изменения, соответствующая запуску TC?

#1999:  Author: Loopback PostPosted: Fri Apr 19, 2024 14:44
    —
jentoso wrote:
роде "рабочая" еще не выкладывалась?

На то она и рабочая, что еще не в общем доступе Smile
jentoso wrote:
Если значение ключа в INI совпадает, значит и недолжна срабатывать команда IniWrite.

Прошу прощения, недоглядел, неправильно привел пример. Здесь простая текстовая строка, переменные в них в сравнении не будут разворачиваться (это только свойство функций, которые явно подразумевают разворачивание переменных в строковых параметрах). Переменную с текстом надо соединять вот так:
Code:

if not (%OCRPATH% = %COMMANDER_PATH% & "\Utils\IrfanView\Plugins\Tesseract\") Then

#2000:  Author: jentoso PostPosted: Fri Apr 19, 2024 15:08
    —
Loopback
Quote:
это только свойство функций, которые явно подразумевают разворачивание переменных в строковых параметрах

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

#2001:  Author: Orion9 PostPosted: Sun Apr 21, 2024 00:26
    —
Loopback wrote:
Версия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint

Класс! Smile

С панелью разобрался. Сначала думал, что проблемные пункты объединяет только присутствие проблелов, но как только открыл панель в тектовом редакторе, сразу увидел, что у всех у них нет ключа cmd=. Версия 1.2.1.1 относилась к этому лояльно и отображала все пункты и значки, хотя сам ТС считает такие пункты невалидными в плане загрузки значков - пока не укажешь команду, значки отображаться не будут. Т.ч. все правильно. Прописал временно заглушку "em_em" и все работает.

Я тут вот что подумал. А не желаете сделать команду, которая будет отображать статус Autorun - основную версию, загруженные модули (и их версии), даты изменений, информацию о загруженных потоках и т.д. В общем, расширенное окно About Smile

#2002:  Author: Loopback PostPosted: Sun Apr 21, 2024 14:05
    —
Orion9 wrote:
С панелью разобрался.

Это хорошо. Да, в той версии парсер панелей пришлось переписать, отличия могут быть.

Orion9 wrote:
А не желаете сделать команду, которая будет отображать статус Autorun - основную версию, загруженные модули (и их версии), даты изменений, информацию о загруженных потоках и т.д.

Для начала хотелось бы понять предназначение всего этого. Просто посмотреть? Но то что загружено зависит от скрипта, который вы пишете сами, а библиотек не так уж и много. Версии и даты библиотек и так можно увидеть средствами тотала или системы. Информация о загруженных потоках - что имеется в виду?

Функция для получения некоторой отладочной информации будет, пока что с информацией о переменных, инициализированных на момент вызова в конкретной пользовательской функции. Что-то можно будет в эту функцию добавить, но хотелось бы чтобы от этого была какая-то практическая польза.

#2003:  Author: Orion9 PostPosted: Sun Apr 21, 2024 17:39
    —
Quote:
но хотелось бы чтобы от этого была какая-то практическая польза.

А какая практическая польза от окна About? Laughing

Вообще, я люблю смотреть в окна About, особенно когда в них все видно: автор, дата, версия, пути к модулям и конфигурации, что загружено и выполняется и т.д. и т.п.)) Не всегда это бывает уместно, но в случае с вашим плагином, я думаю, самое то.

У меня верхнее меню заканчивается строками:
Quote:
HELP_BREAK

POPUP ""
END_POPUP

MENUITEM "Reboot", em_exit_1
MENUITEM ":::", em_TCFullScreen

Хотел бы, чтобы там еще и Autorun был, чтобы не лазить в каталог лишний раз, а видеть все сразу.

Простой поток, который выполняет одну команду время от времени можно написать в три оператора: цикл-> сон -> команда. Вот только проверить, выполняется ли такой поток и получить с него статус о таймере - это отдельные танцы. А хотелось бы, чтобы сразу в специальном окне Autorun была информация о всех запущенных потоках Smile

#2004:  Author: Loopback PostPosted: Sun Apr 21, 2024 23:22
    —
Версия от 21.04.2024

- для ControlSetHint добавлен костыль в виде флага /F, позволяющий избавиться от родной подсказки путем временного перевода фокуса на подсказку.
- подсказка теперь не уходит за границы экрана
- добавлена функция SetHintParam

Code:
SetHintParam("CSH" | "SH", <param_id>, <param1> [, <param2> ... <param5>]


Первый параметр "SH" или "CSH" - для какой функции будут заданы параметры. Ну коряво, да, но например 0 и 1 тоже вроде не лучше.
EDIT: в выложенной версии забыл переделать на строки, работают именно 0 и 1. В следующей исправлю.

param_id: одна из строк:
Reload - перезагружает параметры из конфига TC заново
Delay - (только для csh) задержка появления подсказки, в мс
Font - шрифт, порядок параметров: size, face, weight, style, charset
Border, DarkBorder - цвет рамки
BackColor, DarkBackColor - фон
Text, DarkText - цвет текста

Цвета в RGB

Примеры:
Code:
SetHintParam("SH", "Font", 9, "Courier New")
SetHintParam("SH", "BackColor", 0x00FF00)


На этом в первом приближении подсказки можно считать завершенными, надо только справку к ним написать.


Orion9 wrote:
А какая практическая польза от окна About?

Обычно версия, я как-то редко ожидаю от него большего Smile Но это все же удел графических приложений.

Orion9 wrote:
Вообще, я люблю смотреть в окна About, особенно когда в них все видно

Суть понятна. Но если честно, в моем понимании это все же больше "шашечки". Можно подумать, но явно не сейчас, учитывая огромное количество недоделанного.

Orion9 wrote:
Хотел бы, чтобы там еще и Autorun был

Ну что-то (версии, даты), если очень хочется, вполне можно сделать скриптом: пройти по файлам и получить данные из versionInfo. Там дел-то на десять минут. Со статусом загрузки dll чуть сложнее, но не намного.

Orion9 wrote:
Вот только проверить, выполняется ли такой поток и получить с него статус о таймере - это отдельные танцы.

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

А вот что понимается под "статус о таймере" я так и не понял.

Orion9 wrote:
А хотелось бы, чтобы сразу в специальном окне Autorun была информация о всех запущенных потоках

Я просто не вижу, какая информация могла бы там выдаваться. Ну хорошо, вот запущено 5 потоков, с такими-то идентификаторами. Что нам даёт эта информация?

#2005:  Author: Orion9 PostPosted: Tue Apr 23, 2024 00:37
    —
Loopback
Попробовал на такой конфигурации:
Quote:
SetHintParam(1, "Font", 9, "Consolas")
SetHintParam(1, "BackColor", 0x000000)
SetHintParam(1, "Text", 0xFFFFFF)

Все работает Smile С ControlSetHint не проводил эксперементов, т.к. пока не нашел, где можно применить этот функционал. А вот как, хотя бы теоретически, заставить появляться хинт над определенной кнопкой панели инструментов, и можно ли? )
Quote:
Но это все же удел графических приложений.

Подобная фича у фоновых процессов и задач смотрится еще лучше.
Quote:
Можно подумать, но явно не сейчас, учитывая огромное количество недоделанного.

Так дэдлайнов никаких нет.
Quote:
Ну что-то (версии, даты), если очень хочется, вполне можно сделать скриптом: пройти по файлам и получить данные из versionInfo. Там дел-то на десять минут. Со статусом загрузки dll чуть сложнее, но не намного.

Интересен, прежде всего, нативный само-статус.
Quote:
Поток, пока не будет явно произведен выход из цикла, находится всегда в запущенном состоянии. При необходимости можно, например, сделать глобальную переменную, установить ее при запуске потока и проверять.

Это и есть те самые танцы, о которых я писал. А если поток вылетит и переменная не изменится, может быть такое в теории?
Quote:
А вот что понимается под "статус о таймере" я так и не понял.

 Hidden text

#2006:  Author: Loopback PostPosted: Tue Apr 23, 2024 01:52
    —
Orion9 wrote:
А вот как, хотя бы теоретически, заставить появляться хинт над определенной кнопкой панели инструментов, и можно ли?

Нет, узнать надежно какая кнопка нельзя. Ну я во всяком случае не представляю, как это можно сделать. Максимум что можно, наверно, это например найти 5 кнопку слева. Но толку от этого никакого нет. Да и смысл, у кнопок панелей свои настраиваемые подсказки.

Orion9 wrote:
Это и есть те самые танцы, о которых я писал.

Ну хорошо, как вы себе это представляете, без "танцев"? Ну вот хотя бы в виде псевдокода, или пример из другого языка живой. Просто мне кажется мы по-разному понимаем эти вещи.

Orion9 wrote:
А если поток вылетит и переменная не изменится, может быть такое в теории?

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

Orion9 wrote:
Как проверить, сколько осталось до следующего форматирования диска?

Если писать так - то никак, конечно. Точно так же, как и в других языках. Sleep это не таймер, это задержка, блокирующая функция, в момент которой по определению ничего не происходит.

Но при желании можно сделать. Разбить интервал Sleep на небольшие части, в зависимости от того, какая нужна точность:



Code:

Global timer

Func Thread()
  while 1
    timer = 0
    while timer < 3600000
      sleep(100)
      timer = timer + 100
    wend
    cmd format c:\
  wend 
EndFunc


В переменной timer будет время прошедшее с момента начала цикла, которое можно проверить.

Но я так понимаю, это опять "танцы", так что еще раз, хорошо бы увидеть пример без них.

#2007:  Author: Monarch-LFV PostPosted: Tue Apr 23, 2024 07:57
    —
Вопрос знающим: у меня имеется ini файл, из которого я считываю значение ключа PortablePath (путь до папки) и его задаю в переменную окружения %portable% командой SetEnv.
Все хорошо работает, пока в INI файле этот путь прописан абсолютно (как обычно).
Но, если в INI-файле такое:
Code:
[PortableConfig]
PortablePath=%commander_path%\Portable

то почему-то переменная %commander_path% не разворачивается, и в итоге переменная окружения так и остается неразвернутая "%commander_path%\Portable", и соответственно, не работает обращение к этой переменной окружения.
Вот запись в autorun.cfg:
Code:
IniRead PP %COMMANDER_PATH%\wincmdUser.ini PortableConfig PortablePath
SetEnv portable %PP%


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

Еще заметил, что если выводить в сообщении эту переменную окружения разными способами, то будут получены разные значения:
Code:
msgbox %portable%      -> вывод: %commander_path%\Portable
msgbox (%portable%)    -> вывод: D:\Totalcmd\Portable

#2008:  Author: jentoso PostPosted: Tue Apr 23, 2024 09:08
    —
Monarch-LFV
Видимо все связано с тем, что были изменения и нам об этом уже неоднократно выше указывали. Надо в формате
%COMMANDER_PATH% & "\Portable"

#2009:  Author: Monarch-LFV PostPosted: Tue Apr 23, 2024 09:20
    —
jentoso wrote:
были изменения и нам об этом уже неоднократно выше указывали

Ну переписка довольно активная и большая, упустил.
Но и в вашем предложенном варианте тоже не работает. Теперь в переменной окружения такое:
Code:
%COMMANDER_PATH% & "\Portable"


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

При этом просто вот такая запись в autorun.cfg работает без проблем и всяких амперсандов:
Code:
SetEnv portable "%COMMANDER_PATH%\Portable"

Но мне нужно именно считывать с ИНИ, и нужна именно переменная оркужения %portable%.

#2010:  Author: Loopback PostPosted: Tue Apr 23, 2024 11:25
    —
Monarch-LFV
Нет, тут дело не в изменениях, так было изначально. Просто команды разворачивают переменные в самих переданных параметрах. А здесь получается ещё одна переменная в тексте, который сам является значением переменной. Поэтому она и не разворачивается.

Решений два. Использовать командный синтаксис + вычисляемые строки или функциональный синтаксис.

Code:

SetEnv portable, %"%pp%"
SetEnv("portable", %pp%)



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 133, 134, 135, 136, 137  Next  :| |:
Page 134 of 137

Powered by phpBB © 2001, 2005 phpBB Group