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
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Thu Sep 09, 2010 12:28    Post subject: Создание ярлыков выделенных файлов ассоциированн. программой Reply with quote

Столкнулся с такой проблемой
Заметил, что создавая ярлыки для некоторых файлов обычными способами, они на рабочем столе и в проводнике просто не работают, потому что в системе эти файлы не ассоциированы
Давно пользуюсь написанным для этого скриптом (я его немного уменьшил)
Code:
'======================================================================
' Создание ярлыков выделенных файлов ассоциированной программой
' Параметры: {файл-список} {целевая папка}
' Пример параметров вызова из TC: %L "%T"
' Автор Andrey_A
'======================================================================
Option Explicit
Dim FSO, TCS, ListFile, SelFile, Path, TPath, i, k, m, n, sym, Ext, Dir, Name, Argument, WD, Icon, link, Shell
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("WScript.Shell")
Set TCS = CreateObject("TCSCRIPT.Helper")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
TPath  = WScript.Arguments(1)
 
Do While Not ListFile.AtEndOfStream
     SelFile = ListFile.ReadLine
 
Argument = """" & SelFile & """"
Dir = SelFile
WD = ""
Icon = Dir & ",0"

' Извлекаем расширение
 For k = 0 To Len(SelFile)
    sym = Mid(SelFile,Len(SelFile) - k,1)
       If sym = "." Then
             m = Len(SelFile) - k + 1
             k = Len(SelFile)
       end if
  Next
Ext = ""
  For i = m To Len(SelFile)
              Ext = Ext & Mid(SelFile,i,1)
  Next     
     
     ' Извлекаем имя
 For k = 0 To Len(SelFile)
    sym = Mid(SelFile,Len(SelFile) - k,1)
       If sym = "\" Then
             n = Len(SelFile) - k + 1
             k = Len(SelFile)
       end if
  Next
Name = ""
  For i = n To m - 2
              Name = Name & Mid(SelFile,i,1)
  Next   
 

If Ext = "djvu" or Ext = "Djvu" or Ext = "DJVU" or Ext = "djv" or Ext = "Djv" or Ext = "DJV" Then
    Dir = "%COMMANDER_PATH%\Programs\Text\WinDjView\WinDjView.exe"
    WD = "%COMMANDER_PATH%\Programs\Text\WinDjView\"
    Icon = "%COMMANDER_PATH%\Wcmicons.dll,736"
    Name = "Книга " & Name
End If

If Ext = "CHm" or Ext = "Chm" or Ext = "chm" or Ext = "CHM" Then
   Dir = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\hh.exe"
  WD = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\"
  Icon = "%COMMANDER_PATH%\Wcmicons.dll,590"
  Name = "Справка " & Name
End If

 If Ext = "Pdf" or Ext = "PDF" or Ext = "PdF" or Ext = "PDf" or Ext = "pDf" or Ext = "pdF" or Ext = "pDF" or Ext = "pdf" Then
 Dir = "%COMMANDER_PATH%\Programs\Text\Foxit_Reader\Foxit Reader.exe"
WD = "%COMMANDER_PATH%\Programs\Text\Foxit_Reader\"
Icon = "%COMMANDER_PATH%\Wcmicons.dll,1823"
End If

' Создаём ярлык
Set link = Shell.CreateShortcut(TPath & "\" & Name &".lnk")
link.Arguments = Argument
link.Description = Argument
link.IconLocation = Icon
link.TargetPath = Dir
link.WindowStyle = 1
link.WorkingDirectory = WD
link.Save

Loop

   ListFile.Close
   Set ListFile = Nothing
   Set FSO = Nothing
   WScript.Quit


Тут есть несколько моментов с которыми сам не справлюсь и поэтому хотел попросить помощи у профессионалов

1. Подправить скрипт... (есть ли функция где Ext читался без регистра, просто длинно получается - я встречал файлы где расширения были CHM, chm, Chm и даже cHm - и так со всеми различными расширениями файлов)

2. В скрипте есть блок для определённого типа файлов (к примеру)
Code:
If Ext = "CHm" or Ext = "Chm" or Ext = "chm" or Ext = "CHM" Then
   Dir = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\hh.exe"
  WD = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\"
  Icon = "%COMMANDER_PATH%\Wcmicons.dll,590"
  Name = "Справка " & Name
End If


Можно ли попробовать создать другой скрипт, который бы сканировал секцию [Associations] и, находя расширения, брал информацию и вставлял бы блок для каждого из них в этот скрипт. Тем самым получился бы скрипт, создающий ярлыки открывающие файл нужной нам программой. Я думаю, что это пригодится не только мне
Спасибо заранее за понимание
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2224
Location: Москва, Россия

Post (Separately) Posted: Thu Sep 09, 2010 14:19    Post subject: Reply with quote

1.
Andrey_A wrote:
If Ext = "CHm" or Ext = "Chm" or Ext = "chm" or Ext = "CHM" Then

Code:
If UCase(Ext) = "CHM" Then

2. А зачем париться с реестром? Если уже ассоциировано, то и запустится ассоциированное приложение при запуске файла.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Thu Sep 09, 2010 15:05    Post subject: Reply with quote

Batya спасибо за совет с UCase(Ext) , а что касается реестра, я про него ничего не говорил, более того у меня реестр почти пуст - т.е. ни один файл не ассоциирован, говоря о [Associations] , я имел ввиду секцию в wincmd.ini . Ещё раз пример: под курсором файл ...avi , нажимаю ctrl+Shift+F5 - создаётся ярлык, который открывается каким-то плеером
Code:
Target:         E:\Фильмы\Cherepa\Cherepa_1.avi
Arguments:      
Working folder:   E:\Фильмы\Cherepa
Shortcut key:      No
Window:      Normal
Comments:      E:\Фильмы\Cherepa\Cherepa_1.avi
Path to icon:      Not specified


а мне надо "моим" плеером
Code:
Target:         C:\Total Commander Image\Programs\Players\VLC\Vlc.exe
Arguments:      "E:\Фильмы\Cherepa\Cherepa_1.avi"
Working folder:   %COMMANDER_PATH%\Programs\Players\VLC\
Shortcut key:      No
Window:      Normal
Comments:      "E:\Фильмы\Cherepa\Cherepa_1.avi"
Path to icon:      %COMMANDER_PATH%\Wcmicons.dll
         icon number: 576

и никакого реестра
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu Sep 09, 2010 15:29    Post subject: Reply with quote

[off]Посмотри ext.vbs от Script Content Plugin и объедини If'ы в Case по образцу. Чем больше вероятность встречи данного расширения в твоей работе тем раньше его проверяешь.
Это примерно равнозначно вставке в твои If'ы GoTo на конец блока If'ов, чтобы уже не проверять расширения если оно уже определилось и обработано[/off]
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2224
Location: Москва, Россия

Post (Separately) Posted: Thu Sep 09, 2010 16:24    Post subject: Reply with quote

Andrey_A wrote:
говоря о [Associations] , я имел ввиду секцию в wincmd.ini

Ааа... Опять тороплюсь.
Наверное, можно. Только я в ближайшее время за это браться не буду точно. Со временем очень сложно.

Кстати, ещё совет - для определения расширения и имени файла без расширения лучше использовать соответствующие методы объекта FSO:
Code:
FSO.GetBaseName(path)
FSO.GetExtensionName(path)

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Wed Oct 06, 2010 02:09    Post subject: Reply with quote

Обложился различными справками по скриптам и решил задачу самостоятельно, пользуюсь уже неделю, вроде бы всё работает...
Code:
'=====================================================================================
' Создание ярлыков ВЫДЕЛЕННЫХ файлов, связанных с Программой , ассоциированной в Total Commander
 '
' В параметрах вызова из TC должно быть прописанo ТРИ параметра:
' {Файл Список} {Файл\Секция Ассоциаций} {Путь сохранения ярлыка}
'
' ============== Параметр №1 {Файл Список} ==================================================
'
'       Должно быть прописано %L либо Путь\к_файл_списку_открываемых_файлов.txt
'
' ============== Параметр №2 {Файл\Секция Ассоциаций} ===============================================
'
'       Ассоциации прописаны в секции [Associations]
'       Для корректной работы секцию рекомендуется вынести из файла Wincmd.ini , прописав в нём
' [Associations]
' RedirectSection=WinAssociations.ini
'
'       Можно составить СВОЙ ФАЙЛ АССОЦИАЦИЙ, вне файла Wincmd.ini где синтаксис будет таким же как и в секции [Associations]  (без строки значков)
'
' Filter1=*.TXT;*.inc;
' Filter1_open=""%COMMANDER_PATH%\Plugins\exe\AkelPad\AkelPad.exe" "%1""
' Filter2=*.JPG;*.bmp;
' Filter2_open=""%COMMANDER_PATH%\Plugins\wlx\Imagine\Imagine.exe" "%1""
'
'       Важно!!! После расширения, даже если оно одно добавлять {;} (точку с запятой) т.е.  Filter1=*.TXT;
'
'============== Параметр №3  {Путь сохранения ярлыка } ===============================
'
'             Должно быть прописано "%T" либо "%P" либо "Путь\сохранения\ярлыка\"

'============== Примеры ===================================================================
'
'  %L "%%COMMANDER_PATH%%\WinAssociations.ini" "%T"
'  %L "%%COMMANDER_PATH%%\Wincmd.ini" "%P"
'  %L "%%COMMANDER_PATH%%\UserAssociations_1.txt" "%APPDATA%\Microsoft\Internet Explorer\Quick Launch"
' "%%COMMANDER_PATH%%\ListFiles.txt" "%%COMMANDER_PATH%%\UserAssociations_2.txt" "%%HOMEPATH%%\Desktop\"
'
' Автор:             Аверин Андрей (28.09.2010)
' Версия:          1.6
'======================================================================
Option Explicit
Dim FSO, ListFile, SelFile, TPath, Ass, ListAss, Stroka, Target, F, i, m, Ext, ExtAss, Name, Arguments, WorkingFolder, Icon, link, Shell, TPathN,Description
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("WScript.Shell")

Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
TPath  = WScript.Arguments(2)
TPath = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(TPath))

Do While Not ListFile.AtEndOfStream
     SelFile = ListFile.ReadLine
 
Name = FSO.GetBaseName(SelFile)
Ext = FSO.GetExtensionName(SelFile)                           ' Извлекаем расширение файла
ExtAss = UCase("*." & Ext & ";")                                      ' Готовим строку для поиска в ассоциациях

TPathN = TPath & "\" & Name & "." & Ext & ".lnk" ' Параметры ярлыка по умолчанию
Arguments =  ""
Target = SelFile
Icon = Target & ",0"
    
           If FSO.FolderExists(SelFile) Then                          ' Если выделена папка
           Target = SelFile
           Icon = ",0"
           TPathN = TPath & "\" & Name & "." & "lnk"
           Description = SelFile
           End if

       Ass = WScript.Arguments(1)
      Ass = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(Ass))
      ListAss =  Split(FSO.OpenTextFile(Ass).ReadAll, vbNewLine)
         i = 0
         m = 0
     For Each F In ListAss
              
   If F <> "" or Ext <> "" Then
   
        If  InStr(1,ListAss(i),"|") > 1 Then
           Stroka = UCase(Left(ListAss(i), InStr(1,ListAss(i),"|")))
        Else
           Stroka = UCase(ListAss(i))
        End If
    
        if m = 0 Then
           if InStr(1,Stroka,ExtAss) > 1 Then  ' Ищем номер строки и затем ассоциированную программу
              if InStr(1,UCase(ListAss(i+1)),"OPEN") > 1 Then
                 Target = Mid(ListAss(i+1), InStr(1, ListAss(i + 1), chr(34)) + 2 , Len(ListAss(i+1)) - InStr(1, ListAss(i + 1), chr(34)) - 8)
                 TPathN = TPath & "\" & Name & "." & Ext & ".lnk"
                  Description = SelFile
                  Arguments = Chr(34) & SelFile & Chr(34)
                    If InStr(1,UCase(ListAss(i+2)),"ICON") > 1 Then
                         Icon = Mid(ListAss(i+2), InStr(1, ListAss(i + 2), "=") + 1 , Len(ListAss(i+2)) - InStr(1, ListAss(i + 2), "="))
                    End If
              End if
             m = 1
          End if
       End if
       i = i + 1
   End If
    Next

WorkingFolder = FSO.GetParentFolderName(Target)
Set link = Shell.CreateShortcut(TPathN) ' Создаём ярлык
link.Arguments = Arguments
link.Description = Description
link.IconLocation = icon
link.TargetPath = Target
link.WindowStyle = 1
link.WorkingDirectory = WorkingFolder
link.Save

Loop
   ListFile.Close
   Set ListFile = Nothing
   Set FSO = Nothing
   WScript.Quit

Может кому-то тоже пригодится
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