<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: информация о версии всех плагинов Total Commander]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3422&amp;type=atom" />
	<updated>2009-07-16T20:38:29Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=3422</id>
		<entry>
			<title type="html"><![CDATA[VBS: информация о версии всех плагинов Total Commander]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=26088#p26088" />
			<content type="html"><![CDATA[<p>Когда то возникла необходимость вытащить subj , тогда и родился этот нехитрый скрипт.<br />Может кому пригодится...<br />Скрипт читает файл wincmd.ini сначала в папке %windir%, если его там нет то в папке запущенного Total Commander&#039;а, <br />регулярным выражением выбирает имена файлов-плагинов и собирает с них информацию при помощи objShellApp.NameSpace(folder).<br />Вся солянка наливается в Excel.</p><div class="codebox"><pre><code> 
&#039;проверка на один запуск
On Error Resume Next
Set objService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2&quot;)
If Err.Number &lt;&gt; 0 Then
    WScript.Echo Err.Number &amp; &quot;: &quot; &amp; Err.Description
    WScript.Quit
End If
QueryText = &quot;SELECT * FROM Win32_Process WHERE CommandLine LIKE &#039;%&quot; &amp; WScript.ScriptName &amp; &quot;%&#039;&quot;
Set colProc = objService.ExecQuery(QueryText)
If colProc.Count &gt; 1 Then
    WScript.Echo &quot;Скрипт уже запущен&quot;
    WScript.Quit
End If

Set objRegExp = CreateObject(&quot;VBScript.RegExp&quot;)
Set fso = CreateObject(&quot;scripting.filesystemobject&quot;)
set WshShell = CreateObject(&quot;wscript.Shell&quot;)
Set objShellApp = CreateObject(&quot;Shell.Application&quot;)
Set xlApp = CreateObject(&quot;Excel.Application&quot;) 
xlApp.Visible = True
xlApp.Workbooks.Add    
xlApp.Cells(1, 1).Value = &quot;FileName&quot;
xlApp.Cells(1, 2).Value = &quot;Description&quot;
xlApp.Cells(1, 3).Value = &quot;Version&quot;
xlApp.Cells(1, 4).Value = &quot;Version2&quot;

objRegExp.IgnoreCase = 1
objRegExp.Global = 1
&#039;проверяем запущенность Total Commander
On Error Resume Next
Set objService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2&quot;)
If Err.Number &lt;&gt; 0 Then
    WScript.Echo Err.Number &amp; &quot;: &quot; &amp; Err.Description
    WScript.Quit
End If
&#039;ищу в памяти Total ((TOTAL)|(WIN)) commander
objRegExp.Pattern = &quot;((TOTAL)|(WIN))CMD??.EXE&quot;
For Each objProc In objService.ExecQuery(&quot;SELECT * FROM Win32_Process&quot;)
    If objRegExp.Test(objProc.Caption) Then Exit For
Next

&#039;читаем wincmd.ini
objRegExp.Pattern=objProc.Caption
If Not fso.FileExists(WshShell.ExpandEnvironmentStrings(&quot;%WINDIR%&quot;)&amp;&quot;\wincmd.ini&quot;) Then
    Set fileFSO = fso.OpenTextFile(objRegExp.Replace(objProc.ExecutablePath,&quot;wincmd.ini&quot;))
Else
    Set fileFSO = fso.OpenTextFile(WshShell.ExpandEnvironmentStrings(&quot;%WINDIR%&quot;)&amp;&quot;\wincmd.ini&quot;)
End If

ini = fileFSO.ReadAll
&#039;если используется %COMMANDER_PATH% то подтигиваем %COMMANDER_PATH%=InstallDir
objRegExp.Pattern=&quot;%COMMANDER_PATH%.*&quot;
CommanderPath=&quot;&quot;
If objRegExp.Test(ini) Then
    objRegExp.Pattern=&quot;InstallDir=.*&quot;
    Set matches=objRegExp.Execute(ini)
    CommanderPath=Replace(matches(0).value,&quot;InstallDir=&quot;,&quot;&quot;)
    &#039;убираю перевод строки в конце
    CommanderPath=Left(CommanderPath,Len(CommanderPath)-1)
End If
&#039;выбираем плагины
objRegExp.Pattern=&quot;[-+~!#$%^&amp;()@:\s\\\w\%а-я]+\\plugins.*w.x&quot;
Set matches=objRegExp.Execute(ini)

i=2
&#039;находим plugins


For Each Match in matches      &#039; Iterate Matches collection.
    
    &#039;если есть переменные окружения выставляем их
    full_path=WshShell.ExpandEnvironmentStrings(Match.value)
    If CommanderPath&lt;&gt;&quot;&quot; Then full_path=Replace(full_path,&quot;%COMMANDER_PATH%&quot;,CommanderPath)
    &#039;имя папки
    objRegExp.Pattern=&quot;.*\\&quot;
    Set matches2=objRegExp.Execute(full_path)
        For Each Match2 in matches2      &#039; Iterate Matches collection.
            folder=Match2.value            
        Next
    &#039;имя файла
    objRegExp.Pattern=&quot;\w+\..*&quot;
    Set matches2=objRegExp.Execute(full_path)
        For Each Match2 in matches2      &#039; Iterate Matches collection.
            filename=Match2.value
        Next
        
    Set objFolder = objShellApp.NameSpace(folder)
    Set objItem = objFolder.ParseName(filename)
    
    xlApp.Cells(i, 1).Value = full_path
    &#039;xlApp.Cells(i, 2).Value = filename
    xlApp.Cells(i, 2).Value = objFolder.GetDetailsOf(objItem, 37)    
    xlApp.Cells(i, 3).Value = objFolder.GetDetailsOf(objItem, 38)
    xlApp.Cells(i, 4).Value = objFolder.GetDetailsOf(objItem, 40)
    i=i+1
Next
WScript.Quit</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Alexey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2696</uri>
			</author>
			<updated>2009-07-16T20:38:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=26088#p26088</id>
		</entry>
</feed>
