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 ... , 133, 134, 135  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
jentoso



Joined: 20 Dec 2007
Posts: 353

Post (Separately) Posted: Fri Apr 19, 2024 12:28    Post subject: Reply with quote

Что-то не могу с простым действием разобраться.
Проверяю значение ключа в 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

Что не так делаю?
_________________
TC 11.03 combo, Windows 10 x64
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1293

Post (Separately) Posted: Fri Apr 19, 2024 13:18    Post subject: Reply with quote

jentoso
Это баг с <> для строк в последней версии, в рабочей уже исправлен. А пока можно переписать условие так:

Code:

if not (%OCRPATH% = "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\") Then
Back to top
View user's profile Send private message
jentoso



Joined: 20 Dec 2007
Posts: 353

Post (Separately) Posted: Fri Apr 19, 2024 14:22    Post subject: Reply with quote

Loopback
Вроде "рабочая" еще не выкладывалась?
По поводу проверки ключа, теперь срабатывает, но не понятен следующий момент. Если значение ключа в INI совпадает, значит и недолжна срабатывать команда IniWrite. Тогда почему в свойстве самого INI файла видна дата и время изменения, соответствующая запуску TC?
_________________
TC 11.03 combo, Windows 10 x64
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1293

Post (Separately) Posted: Fri Apr 19, 2024 14:44    Post subject: Reply with quote

jentoso wrote:
роде "рабочая" еще не выкладывалась?

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

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

if not (%OCRPATH% = %COMMANDER_PATH% & "\Utils\IrfanView\Plugins\Tesseract\") Then
Back to top
View user's profile Send private message
jentoso



Joined: 20 Dec 2007
Posts: 353

Post (Separately) Posted: Fri Apr 19, 2024 15:08    Post subject: Reply with quote

Loopback
Quote:
это только свойство функций, которые явно подразумевают разворачивание переменных в строковых параметрах

Да, об этом ранее здесь уже оговаривалось, но без опыта не сразу понятно что к чему.
Теперь все работает как надо.
_________________
TC 11.03 combo, Windows 10 x64
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 200

Post (Separately) Posted: Sun Apr 21, 2024 00:26    Post subject: Reply with quote

Loopback wrote:
Версия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint

Класс! Smile

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

Я тут вот что подумал. А не желаете сделать команду, которая будет отображать статус Autorun - основную версию, загруженные модули (и их версии), даты изменений, информацию о загруженных потоках и т.д. В общем, расширенное окно About Smile
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1293

Post (Separately) Posted: Sun Apr 21, 2024 14:05    Post subject: Reply with quote

Orion9 wrote:
С панелью разобрался.

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

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

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

Функция для получения некоторой отладочной информации будет, пока что с информацией о переменных, инициализированных на момент вызова в конкретной пользовательской функции. Что-то можно будет в эту функцию добавить, но хотелось бы чтобы от этого была какая-то практическая польза.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 200

Post (Separately) Posted: Sun Apr 21, 2024 17:39    Post subject: Reply with quote

Quote:
но хотелось бы чтобы от этого была какая-то практическая польза.

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

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

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

POPUP ""
END_POPUP

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

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

Простой поток, который выполняет одну команду время от времени можно написать в три оператора: цикл-> сон -> команда. Вот только проверить, выполняется ли такой поток и получить с него статус о таймере - это отдельные танцы. А хотелось бы, чтобы сразу в специальном окне Autorun была информация о всех запущенных потоках Smile
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1293

Post (Separately) Posted: Sun Apr 21, 2024 23:22    Post subject: Reply with quote

Версия от 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 потоков, с такими-то идентификаторами. Что нам даёт эта информация?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 200

Post (Separately) Posted: Tue Apr 23, 2024 00:37    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1293

Post (Separately) Posted: Tue Apr 23, 2024 01:52    Post subject: Reply with quote

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 будет время прошедшее с момента начала цикла, которое можно проверить.

Но я так понимаю, это опять "танцы", так что еще раз, хорошо бы увидеть пример без них.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 239

Post (Separately) Posted: Tue Apr 23, 2024 07:57    Post subject: Reply with quote

Вопрос знающим: у меня имеется 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
Back to top
View user's profile Send private message
jentoso



Joined: 20 Dec 2007
Posts: 353

Post (Separately) Posted: Tue Apr 23, 2024 09:08    Post subject: Reply with quote

Monarch-LFV
Видимо все связано с тем, что были изменения и нам об этом уже неоднократно выше указывали. Надо в формате
%COMMANDER_PATH% & "\Portable"
_________________
TC 11.03 combo, Windows 10 x64
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 239

Post (Separately) Posted: Tue Apr 23, 2024 09:20    Post subject: Reply with quote

jentoso wrote:
были изменения и нам об этом уже неоднократно выше указывали

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


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

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

Но мне нужно именно считывать с ИНИ, и нужна именно переменная оркужения %portable%.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1293

Post (Separately) Posted: Tue Apr 23, 2024 11:25    Post subject: Reply with quote

Monarch-LFV
Нет, тут дело не в изменениях, так было изначально. Просто команды разворачивают переменные в самих переданных параметрах. А здесь получается ещё одна переменная в тексте, который сам является значением переменной. Поэтому она и не разворачивается.

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

Code:

SetEnv portable, %"%pp%"
SetEnv("portable", %pp%)
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 ... , 133, 134, 135  Next
Page 134 of 135

 
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