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 

Запуск программы и открытие в ней поддерживаемых файлов

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sun Sep 23, 2018 22:17    Post subject: Запуск программы и открытие в ней поддерживаемых файлов Reply with quote

Функционал: 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
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;

_________________
Win11 x64 Eng | TC DreamLair eternal pre-α
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
Page 1 of 1

 
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