LonerD

Joined: 04 Jan 2011 Posts: 1172 Location: Макеевка
|
(Separately) Posted: Sun Sep 23, 2018 22:17 Post subject: Запуск программы и открытие в ней поддерживаемых файлов |
|
|
Функционал: AHK-скрипт для открытия выделенных файлов по очереди в заданной программе с ограничением по количеству. Или же запуск программы в случае, если расширения файлов не поддерживаются.
Описание: В главном меню Тотала или на Панели инструментов имеется кнопка, запускающая программу. Просто запустить редактор или просмотровщик - неинтересно, всё-равно обычно предполагается открывать в нём файл или файлы. А если предполагаемые для открытия файлы как-раз находятся в активной панели (что зачастую и происходит), то хочется совместить полезное с полезным. Просто передать параметр %L - не вариант. Многие программы не отличаются умом и сообразительностью, пытаясь открывать всё подряд, выдают ошибки на неподдерживаемых расширениях... Да ещё если выделено несколько сотен файлов, и начнут открываться каждый в отдельном окне...
Для обхода данных неудобств и был придуман скрипт, который запускает программу. Если выделения нет - заодно открывается файл под курсором (если он с подходящим расширением). Если на панели есть выделенные файлы - то открывается заданное количество первых выделенных файлов с подходящим расширением. Задать количество можно как в параметре, так и в файле настроек (приоритет количеству из параметра).
Требования: Total Commander 9.20+ (точнее 9.20 beta 1 достаточно, так как в этой версии наконец появился полезнейший параметр %Y).
Настройки: Хранятся в ini-файле, который имеет то же имя, что и скрипт и лежит рядом со скриптом. Например, у меня это DreamRunFilesN.ahk и DreamRunFilesN.ini. Файл составлять ручками, подбирая для каждой программы нужные расширения, которые она сможет переварить.
Пример секции ini-файла:
Program - путь к программе (поддержка переменной %commander_path% уже заложена, поддержку других переменных окружения можно добавить в скрипт по аналогии)
LineExt - список поддерживаемых расширений через запятую.
FilesN - максимальное количество открываемых файлов
Code: | [SumatraPDF]
Program=%commander_path%\Utilities\SumatraPDF\SumatraPDF.exe
LineExt=cbr,cbz,djvu,djv,pdf,chm,xps,epub,fb2,pdb,mobi,txt,zip
FilesN=12 |
Пример параметров: %Y"%WL" SumatraPDF 10
Ссылка на полную версию скрипта.
Многобуков, а сам скрипт очень компактный получился:
Code: | ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander DreamLair ;
; Script: Open files in specific program ;
; Script: Відкриття файлів у вказаній програмі ;
; Script: Открытие файлов в заданной программе ;
; Script version: 1.0 (2018.09.23) ;
; Required: Total Commander 9.20+ ;
; Script author: LonerD ;
; Site: https://dreamlair.net ;
; Made in Donetsk People's Republic ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Description:
; Open selected supported files in specific program
; or Run program if selected extensions isn't supported.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Опис:
; Відкрити виділені файли у вказаній програмі або
; запустити програму, якщо розширення не підтримуються.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Описание:
; Открыть выделенные файлы в заданной программе или
; запустить программу, если расширения не поддерживаются.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameters / Параметри / Параметры:
; 1: %Y"%WL" (required / обов'язковий / обязательный)
; 2: (required / обов'язковий / обязательный)
; {program name as in section in ini-file}
; {назва програми, повинна співпадати з назвою секції ini-файлу}
; {название программы, как она указана в названии секции ini-файла}
; 3: {number of opened files; if omitted - read from ini-file }
; {кількість файлів, що будуть відкриті; якщо відсутнє - береться з ini}
; {количество открываемых файлов; если отсутствует, то берётся из ini}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameters example: %Y"%WL" SumatraPDF 10
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; INI-file example:
; [SumatraPDF]
; Program=%commander_path%\Utilities\SumatraPDF\SumatraPDF.exe
; LineExt=cbr,cbz,djvu,djv,pdf,chm,xps,epub,fb2,pdb,mobi,txt,zip
; FilesN=12
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; INI-file must have the same name as script ;
; and located in the same directory ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
#NoEnv
#NoTrayIcon
#SingleInstance ignore
SetBatchLines, -1
if not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
ExitApp
if 0 < 2
ExitApp
FileList = %1%
ProgramN = %2%
FilesN = %3%
SplitPath, A_ScriptFullPath,, ScriptDir,, ScriptNameNoExt
IniFile := ScriptDir . "\" . ScriptNameNoExt . ".ini"
if !FileExist(IniFile)
ExitApp
IniRead, ProgramRun, % IniFile, % ProgramN, Program
EnvGet, commander_path, commander_path
Transform, ProgramRun, Deref, % ProgramRun
ProgramRun := ExpandEnvVars (ProgramRun)
if !FileExist(ProgramRun)
ExitApp
IniRead, LineExt, % IniFile, % ProgramN, LineExt
if FilesN is not integer
IniRead, FilesN, % IniFile, % ProgramN, FilesN
FileListRun := ""
FileListRunN := 0
Loop, Read, % FileList
{
if not InStr(FileExist(A_LoopReadLine), "D")
{
SplitPath, A_LoopReadLine, FileName, FileDir, FileExt, FileNameNoExt
if FileExt in % LineExt
{
FileListRun := FileListRun . A_LoopReadLine . "`r`n"
FileListRunN := FileListRunN + 1
}
}
}
if ( FileListRunN = 0 )
{
Run, % ProgramRun
ExitApp
}
FilesN := Min(FilesN, FileListRunN)
Loop, Parse, % FileListRun, `n, `r
Run, %ProgramRun% "%A_LoopField%"
Until A_Index = FilesN
FileList := ""
FileListRun := ""
ExitApp
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
ExpandEnvVars(ppath)
{
VarSetCapacity(Dest, 2000)
DllCall("ExpandEnvironmentStrings", Str, ppath, Str, Dest, Int, 1998)
Return, Dest
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
|
_________________ Windows 11 | TC DreamLair eternal pre-α |
|