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 ... 213, 214, 215
 
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: 944

Post (Separately) Posted: Sat Nov 29, 2025 20:39    Post subject: Reply with quote

Собственно, три универсальные функции. Код можно добавить в любой модуль.

 Hidden text

Первая функция URLDownloadToFile, о ней было выше. Вместо этой функции можно делать прямой DLL-вызов, как было примере.

Вторая функция WinInetDownloadFile - более продвинутый вариант. Есть "тихий" режим и возможность передавать флаги для стиля подсказки.

Третья функция tip(). Универсальное окно подсказки типа "балун", которое можно использовать в других целях. При первом вызове tip() создается окно и дескриптор сохраняется до конца сессии. Последующие вызовы tip() скрывают и показывают это окно с обновленным текстом. Чем-то это похоже на функцию ShowHint в Autorun.

По умолчанию подсказка показывается у мыши. Возможность задавать координаты отсутствует, но есть флаг "1", который отображает подсказку на позиции предыдущего вызова, а позицию первого вызова можно задать через MouseSetPos, если это нужно.

Всего действуют три флага, их можно суммировать. Флаг "2" делает окно подсказки квадратным, а флаг "4" не делает окно активным после вызова. Но в последнем случае подсказка не будет закрываться по ESC. Когда окно подсказки активно, ESC ее закрывает.

Также ESC прерывает операцию загрузки у функции WinInetDownloadFile, т.е. операцию загрузки можно в любой момент отменить.

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

Самый простой пример загрузки нескольких файлов:

 Hidden text

Более сложный пример с флагами и циклом ожидания:

 Hidden text

Результат

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

Пример проверки страницы плагинов:

 Hidden text

То же самое, что и парсинг rss-ленты, но загрузка html имеет свои плюсы.

Пример запроса к API метео-сайта и получение csv-файла:

 Hidden text

Ну, и на десерт - загрузка рандомных цитат из разных источников:

 Hidden text


 Hidden text

 Hidden text


Какую функцию лучше использовать, наверное WinInetDownloadFile, она более продвинутая. Но и на URLDownloadToFile многое может работать.

Кнопки:
 Hidden text

 Hidden text

 Hidden text

 Hidden text

 Hidden text

 Hidden text
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 944

Post (Separately) Posted: Sun Nov 30, 2025 14:04    Post subject: Reply with quote

Сразу всего не охватишь, поэтому дополню чуть-чуть с вашего позволения.

Loopback
Поменял местами и всё заработало:
 Hidden text

Т.е ControlSetMouseAction выполняется теперь после SetWindowLong. Похоже, ТС х64 именно это не нравилось.
Loopback wrote:
Создаёт с указанным размером, 256. Размер 255 просто чтобы записанная строка гарантированно завершалось нулем.

Т.е. Wstr:256 создает буфер размером в 256 юникодных символов, что = 512 байт, так следует понимать? В общем, не стал загоняться и сделал как у вас.
 Hidden text

Loopback wrote:
Вот и хорошо, и не нужно обвес для статистики городить.

Да, функционал мне понравился. Точнее сказать, он меня пока устраивает. В последнее время часто приходилось выделять новые диапазоны команд для модулей и хотелась сразу видеть все RegisterCommand. Но и SetHotkeyAction теперь можно быстро посмотреть вместе с ControlSetMouseAction. Правда я не сразу заметил, что ошибся в регулярном выражении. Дожно быть
Code:
RegExp("(.)(" & cmd & ".*?)\r", text)
а не
Code:
RegExp("(.)(" & cmd & ".*?)\r\n", text)
иначе команды расположенные вместе пропускаются.

Такую же мелкую оплошность допустил в модуле MediaInfo. Там должно быть
 Hidden text

вместо
 Hidden text

иначе вместо Duration.Empty всегда будет Duration.Warning на немедиа файлах.
Loopback wrote:
Без кастомной отрисовки нет.

А если через прозрачную иконку реализовать?
Loopback wrote:
По обрезке не знаю

Текст обрезался. Именно поэтому в меню функции tip() я оставил комментарий, чтобы не забыть об этом сообщить
Code:
Func tipmnu()
    Local txt
    txt &= 'MENUITEM "Copy text", em_aucmd ' & (gTipText <> "" ?  "" : "/D") & ' -1 tipcopy' & auCRLF
    Return txt
EndFunc

Func tipcopy()
    #ClipPut %"gTipText"
    ClipPut(gTipText)
EndFunc
ведь tipcopy() это просто костыль, изначально было
Code:
txt &= 'MENUITEM "Copy text", em_aucmd ' & (gTipText <> "" ?  "" : "/D") & ' -1 ClipPut %"gTipText"' & auCRLF
но текст в буфере резался.

Также для этой цели закомментировал
Code:
# Static INVALID_HANDLE_VALUE = auX64 ? 0xFFFFFFFFFFFFFFFF : 0xFFFFFFFF
Static INVALID_HANDLE_VALUE = auX64 ? 18446744073709551615 : 4294967295
поскольку запись 0xFFFFFFFFFFFFFFFF не работала в TC x64.

Когда освободитесь, посмотрите, пожалуйста, в чем может быть дело.
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 ... 213, 214, 215
Page 215 of 215

 
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