Запуск программы и открытие в ней поддерживаемых файлов
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Запуск программы и открытие в ней поддерживаемых файлов Author: LonerDLocation: Донецк PostPosted: Sun Sep 23, 2018 22:17
    —
Функционал: 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
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;



Total Commander -> Автоматизация Total Commander


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

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group