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 

Script Request
Goto page Previous  1, 2, 3 ... 22, 23, 24 ... 40, 41, 42  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Sat Feb 04, 2012 11:08    Post subject: Reply with quote

Всем доброго времени суток.
Если уже было, сильно не ругайте - честно искал, но не нашёл. Very Happy
Есть скрипт, по-моему от Batya, который создаёт файл с заданным именем с содержимым буфера обмена.
Можно ли его модифицировать таким образом, чтобы после создания файл сразу же открывался в редакторе (я использую AkelPad)?
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10315
Location: Россия, Саратов

Post (Separately) Posted: Sat Feb 04, 2012 11:20    Post subject: Reply with quote

HEXFIX
Безотносительно к технической стороне вопроса: уже много раз говорено (в том числе в правилах и памятке), что оверквотинг на форуме запрещён. На существующие скрипты надо давать ссылки. Выносится замечание, код заменяется ссылкой.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Feb 09, 2012 01:30    Post subject: Reply with quote

HEXFIX
Забыл про просьбу. Правильней было бы использовать этот скрипт. Но я пользуюсь своим:
Code:
' Создать файл с текстом буфера обмена (при наличии) и открыть его в редакторе
' Параметры: "%P" "<путь к редактору>"
'===================================================================================
P = WScript.Arguments(0) : Ed = WScript.Arguments(1)
Set FSO  = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH  = CreateObject("WScript.Shell")
R = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
A = WSH.RegRead(R)
If A > 0 Then WSH.RegWrite R, 0, "REG_DWORD"
Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
If A > 0 Then WSH.RegWrite R, A, "REG_DWORD"
If Trim(Clip) = "" Then Quit
File = FSO.GetBaseName(FSO.GetTempName) & ".txt"
FSO.OpenTextFile(P & File, 2, True).Write Clip : WSH.Exec(Ed & " " & File) : Quit
Function Quit : Set WSH = Nothing : Set FSO = Nothing : WScript.Quit : End Function
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Feb 09, 2012 02:08    Post subject: Reply with quote

http://forum.wincmd.ru/viewpost.php?p=53362
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Feb 09, 2012 02:12    Post subject: Reply with quote

Smile Улыбнуло. Я сперва хотел тоже предложить эту кнопку, потом, увидев утилиту, подклейку даты и отсутствие указания нужного редактора, передумал..
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Fri Feb 10, 2012 17:15    Post subject: Reply with quote

Предлагаю скрипт переключения x32 <> x64 версий TC по клику на тексте 32 (или 64) за пунктом "Справка" (или последним в меню)
Code:
' Перезапуск x32 <> x64. Закрыть 32-битный и запустить TC x64 (и наоборот). Для x86 только рестарт TC
' сохраните код в файл (напр. 1.vbs), скопируйте в папку (напр. %commander_path%\scripts) и запустите
' скрипт переименуется в SwitchTC32or64.vbs (можно изменить), в UserCmd.ini добавится эта команда,
' в меню добавляется последний пункт (32/64), который перезапускает TC с другой разрядностью

em_cmd = "SwitchTC32or64"   'имя скрипта и em_команды, можно изменить
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
commander_PATH = ExpStr("%COMMANDER_PATH%",0) : commander_INI = ExpStr("%COMMANDER_INI%",0)

Set TCS = CreateObject("TCScript.Helper")
   If not IsObject(TCS) Then MsgBox "Script Helper ActiveX for Total Commander" & vbTab & VbCr & VbCr & "для регистрации в системе выполните:" & VbCr & "TCWSHelp.exe /REGSERVER",vbSystemModal + vbInformation,"Отсутствует компонент ActiveX" : WScript.Quit
If not TCS.IsRunningTC Then WScript.Quit   'скрипт запущен не из ТС
   Set File = FSO.GetFile(WScript.ScriptFullName)
   if FSO.GetBaseName(File) <> em_cmd then File.Name = em_cmd & ".vbs"
UserCmd = ExpStr(commander_INI,1) & "UserCmd.ini"
   if FSO.FileExists(UserCmd) then txt = CleanLF(FSO.OpenTextFile(UserCmd,1).ReadAll) & vbNewLine else txt = ""
   If InStr(txt, "em_" & em_cmd) = 0 Then FSO.OpenTextFile(UserCmd, 2,1).Write txt & "[em_" & em_cmd & "]" & vbNewLine & "cmd=" & ExpStr(WScript.ScriptFullName,1) & em_cmd & ".vbs"

Menu = commander_PATH & "\Language\" & TCS.INIRead(commander_INI,"Configuration","Mainmenu","wcmd_eng.mnu")
x64 = (ExpStr("%PROCESSOR_ARCHITEW6432%",0) = "AMD64" or ExpStr("%PROCESSOR_ARCHITECTURE%",0) = "AMD64")
str32 = "MENUITEM ""32"", em_" & em_cmd : str64 = "MENUITEM ""64"", em_" & em_cmd : exe = commander_PATH & "\totalcmd.exe"
if LCase(ExpStr(ExpStr("%COMMANDER_EXE%",0),2)) = "totalcmd64.exe" Then Mode = 64 Else Mode = 32
If Mode = 32 then if x64 then exe = commander_PATH & "\totalcmd64.exe" else str64 = str32

txt = CleanLF(FSO.OpenTextFile(Menu, 1).ReadAll) : res = txt
If InStr(txt, "em_" & em_cmd) > 0 Then
   if Mode = 32 Then
      If not InStr(txt, str64) > 0 Then res = Replace(txt, str32, str64,1,-1,1)
   else
      If not InStr(txt, str32) > 0 Then res = Replace(txt, str64, str32,1,-1,1)
   end If
Else
   If Mode = 32 Then res = txt & vbNewLine & str64 Else res = txt & vbNewLine & str32
End If
if res <> txt Then FSO.OpenTextFile(Menu, 2).Write res

Do While TCS.IsRunningTC
   TCS.SendCommand "cm_Exit": WScript.Sleep 100 : n = n + 1
   If n > 200 Then Exit Do
Loop

WshShell.Run (exe & " /i=" & commander_INI)
WScript.Quit

Function ExpStr(str, n)   'Раскрыть системные переменные, выделить имя файла или папки
   if n = 1 then ExpStr = FSO.GetParentFolderName(str) & "\" else if n = 2 then ExpStr = FSO.GetFileName(str) else if n = 3 then ExpStr = FSO.GetBaseName(str) else ExpStr = WshShell.ExpandEnvironmentStrings(str)
End Function

Function CleanLF(AllText)   'Удаление лишних пустых строк в конце текста
   Do While (Right(AllText, Len(vbNewLine)) = vbNewLine)
      AllText = Left(AllText, Len(AllText) - Len(vbNewLine))
   Loop
   CleanLF = AllText
End Function


Last edited by Victor_Dobrov on Sat Feb 11, 2012 10:16; edited 4 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Feb 11, 2012 03:54    Post subject: Reply with quote

Victor_Dobrov
Что-то наворочено много и не по делу. Хелпер с регистрацией тут вообще не нужен. Меню почему-то берётся именно английское (русскому пользователю автор об этом сообщить не захотел почему-то), а по логике должно читаться из ключа Mainmenu. Проверку запущенности TC вполне можно опустить при замене.
Строчку с %PROCESSOR_ARCHITEW6432% я вообще не понял. Я обычно разрядность через WMI определяю. Почему сравнивается имя exe-шника именно в верхнем регистре мне совсем непонятно, как и то, почему не учтён исключение с другим именем. Я пришёл к выводу, что проверку нужно делать только по размеру (InternalName не берём). Функция Quote бесполезная. Зачем вообще проверять, есть кавычки или нет, если можно сразу их ставить? Навязывание расположения файла(ов) быть не должно. Лучше просто сделать подписи, где и что менять, этого как правило достаточно. Зачем для переменной em_Name писать отдельно функцию не уловил. Почему написано, что пункт добавляется после меню "Справка" (которой может и не быть), когда оно там совсем никак не идентифицируется?
Скрипт больше тянет на сборочный или для себя. Выкладывание его в паблик преждевременное.


Last edited by Flasher on Sat Feb 11, 2012 04:58; edited 2 times in total
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Sat Feb 11, 2012 04:17    Post subject: Reply with quote

Flasher wrote:
Victor_Dobrov
Меню почему-то берётся именно английское, а по логике должно читаться из ключа Mainmenu. Строчку с %PROCESSOR_ARCHITEW6432% я вообще не понял.

TCS.INIRead(COMMANDER_INI,"Configuration","Mainmenu") - эту строку не заметили?
%PROCESSOR_ARCHITEW6432% - при запуске из под TC x32 определяет, что система - x64.

Не нравится Helper, посоветуйте, как использовать TCFS2
Скрипт делал на случай, если заголовок окна скрыт. Лучше бы ответили, работает ли скрипт, пункт "32" появляется в конце меню?

Quote:
Выкладывание его в паблик преждевременное.
С таким подходом здесь половину скриптов убрать надо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Feb 11, 2012 04:32    Post subject: Reply with quote

Victor_Dobrov wrote:
TCS.INIRead(COMMANDER_INI,"Configuration","Mainmenu") - эту строку не заметили?
В этой строке как раз и стоит wcmd_eng.mnu.
Victor_Dobrov wrote:
%PROCESSOR_ARCHITEW6432% - при запуске из под TC x32 определяет, что система - x64.
Там есть некоторые аспекты, касаемые этой переменной, которые не всегда показывают верный результат. Мы их тут разбирали. К тому же переменная может существовать не по желанию системы, а по желанию пользователя, что и вызовит проблемы. Если надо, могу подсказать как легко получать архитектуру через WMI.
Victor_Dobrov wrote:
Не нравится Helper, посоветуйте, как использовать TCFS2
В TCFS2 есть функции для работы с ini-файлами. Они описаны в справке.

Victor_Dobrov wrote:
С таким подходом здесь половину скриптов убрать надо.
Не согласен. Половиной никак не пахнет. Да и если скрипт пишется кому-то, то проблемы решаются по ходу поступления и тестирования, а если скрипт выкладывается самостоятельно как окончательный (без предупреждения о возможных багах), то это не есть хорошо. Я, например, скрипт обновления ТС сразу выкладывать побоялся, понимая, что могут быть подводные камни. Добрые люди помогли в тестах и работе над исключениями, за что я им благодарен. Если бы я скрипт выложил раньше времени, то тут многим нервы точно подпортил.
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Sat Feb 11, 2012 04:44    Post subject: Reply with quote

Quote:
В этой строке как раз и стоит wcmd_eng.mnu.
но это значение по-умолчанию, читается именно то, что установил пользователь.
Quote:
Если надо, могу подскать как легко получать архитектуру через WMI
не надо, также работает не всегда и слишком тормозит.

Я не совсем понял, вы просите убрать скрипт? Если да, я это сделаю.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Feb 11, 2012 04:48    Post subject: Reply with quote

Victor_Dobrov wrote:
но это значение по-умолчанию, читается именно то, что установил пользователь.
По умолчанию, если на этапе установки был выбран английский.
Victor_Dobrov wrote:
не надо, также работает не всегда и слишком тормозит.
Т.е. "не всегда"? У меня нигде проблем не было (и не только у меня). Да, скорость несколько ниже (тормоза в основном возникают при использовании общей маски (*), что легко обходится), но зато сам способ точно надёжнее. А когда речь о перезапуске, то там вообще этот момент незаметен.
Victor_Dobrov wrote:
Я не совсем понял, вы просите убрать скрипт? Если да, я это сделаю.
Ни в коем случае. Раз обсуждение завелось, то удаление скрипта будет относиться к случаям форумного дурнотония. По крайней мере другим будет ясно, с чем они смогут столкнуться. Мой посыл не охарактеризован призывом к удалению полезной (для кого-то) информации, а исключительно к допиливанию имеющейся.
Back to top
View user's profile Send private message
Victor_Dobrov



Joined: 15 Jul 2008
Posts: 50

Post (Separately) Posted: Sat Feb 11, 2012 07:45    Post subject: Reply with quote

Flasher

Исправил некоторые замечания в SwitchTC32or64.vbs, ссылка на скрипт та же: http://forum.wincmd.ru/viewpost.php?p=89213
Back to top
View user's profile Send private message
skole



Joined: 31 Dec 2004
Posts: 162
Location: Россия, Оренбург

Post (Separately) Posted: Tue Feb 21, 2012 20:17    Post subject: Reply with quote

Еще в тему, может кому понадобится... если Batya доработает, то хорошо Smile

Создание шары из текущего каталога
Code:
' ===================================================================
'  Автор:      SkOle, Оренбург
'  Описание:   Предоставляет текущему каталогу общий доступ
'  Параметры:   %P%N
' ===================================================================

Dim WSH, FSO
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "
ootcimv2")
Set objNewShare = objWMIService.Get("Win32_Share")

DESCRIPTION = InputBox("Укажите описание для создаваемого ресурса", "Создание общего ресурса")

errReturn = objNewShare.Create(WSH.CurrentDirectory, FSO.GetFolder(WSH.CurrentDirectory).Name, 0, TRUE, DESCRIPTION)

If errReturn = 0 Then
   MsgBox "Общий ресурс для каталога " & WSH.CurrentDirectory & " успешно создан", vbInformation, "Уведомление"
End If

Set FSO = Nothing
Set WSH = Nothing

Wscript.Quit


Удаление шары, если текущий каталог таким является
Code:
' ===================================================================
'  Автор:      SkOle, Оренбург
'  Описание:   Убирает у текущего каталога общий доступ,
                                если таковой имеется
'  Параметры:   %P%N
' ===================================================================

Dim WSH, FSO
Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "
ootcimv2")
Set colShares = objWMIService.ExecQuery ("Select * from Win32_Share Where Name = '" & FSO.GetFolder(WSH.CurrentDirectory).Name & "'")

For Each objShare in colShares
    errReturn = objShare.Delete
Next

If errReturn = 0 Then
   MsgBox "Общий ресурс для каталога " & WSH.CurrentDirectory & " успешно удален", vbInformation, "Уведомление"
End If

Set FSO = Nothing
Set WSH = Nothing

WScript.Quit


Установка шрифта
Code:
' ==============================================================
'  Автор:      SkOle, Оренбург
'  Описание:   Устанавливает текущий шрифт в систему
'  Параметры:   %P%N
' ==============================================================

Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
 
If WScript.Arguments.Count > 0 Then
   If FSO.FileExists(WScript.Arguments(0)) Then
      If (LCase(FSO.GetExtensionName(WScript.Arguments(0))) = "ttf") or (LCase(FSO.GetExtensionName(WScript.Arguments(0))) = "fon") or (LCase(FSO.GetExtensionName(WScript.Arguments(0))) = "otf") Then
         Dim WSH
         Set WSH = CreateObject("WScript.Shell")
         
         FSO.CopyFile WScript.Arguments(0), WSH.SpecialFolders("Fonts") & ""
         WSH.Run "RunDll32.exe gdi32.dll,AddFontResourceA " & FSO.GetBaseName(WScript.Arguments(0))
         
         Set WSH = Nothing
      Else
         MsgBox "Данный файл не является шрифтом", vbCritical, "Ошибка"
      End If
   End If
End If

Set FSO = Nothing
WScript.Quit


Аналог ChoiseEditor и пр. вешается на F4
Code:
' ===================================================================
'  Автор:      SkOle, Оренбург
'  Описание:   Выбирает, через какую программу открыть текущий файл
'            Выбор издет из списка в wincmd.ini
'  Параметры:   %P%N
' ===================================================================

Const Section = "ExternalApplication"

If WScript.Arguments.Count > 0 Then
        Dim WSH, FSO, Ext
       
        Set WSH = CreateObject("WScript.Shell")
        Set FSO = CreateObject("Scripting.FileSystemObject")
       
        Commander_Path = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%")
        Ext = FSO.GetExtensionName(WScript.Arguments(0))
        Ini = ReadIni (Commander_Path & "wincmd.ini", Section, Ext)
        If Ini <> "" Then
                Exe = Replace(Ini, "%COMMANDER_PATH%", Commander_Path)
                Ext =  Trim(Left(FSO.GetExtensionName(Exe), 3))
                If LCase(Ext) = "vbs" Then
                        WSH.Run Exe & " " & chr(34) & WScript.Arguments(0) & chr(34)
                Else
                        WSH.Run chr(34) & Exe & chr(34) & " " & chr(34) & WScript.Arguments(0) & chr(34)
                End If       
        Else
                Ini = ReadIni (Commander_Path & "wincmd.ini", Section, "default")
                Exe = Replace(Ini, "%COMMANDER_PATH%", Commander_Path)
                WSH.Run chr(34) & Exe & chr(34) & " " & chr(34) & WScript.Arguments(0) & chr(34)
        End If
               
        Set WSH = Nothing
        Set FSO = Nothing
End If

' Функция чтения INI-файла была взята с форума wincmd.ru

Function ReadIni( myFilePath, mySection, myKey )
        Const ForReading   = 1
        Const ForWriting   = 2
        Const ForAppending = 8

        Dim intEqualPos
        Dim objFSO, objIniFile
        Dim strFilePath, strKey, strLeftString, strLine, strSection

        Set objFSO = CreateObject( "Scripting.FileSystemObject" )

        ReadIni = ""
        strFilePath = Trim( myFilePath )
        strSection  = Trim( mySection )
        strKey = Trim( myKey )

        If objFSO.FileExists( strFilePath ) Then
                Set objIniFile = objFSO.OpenTextFile( strFilePath, ForReading, False )
                Do While objIniFile.AtEndOfStream = False
                strLine = Trim( objIniFile.ReadLine )

                If LCase( strLine ) = "[" & LCase( strSection ) & "]" Then
                        strLine = Trim( objIniFile.ReadLine )

                Do While Left( strLine, 1 ) <> "["
                        intEqualPos = InStr( 1, strLine, "=", 1 )
                        If intEqualPos > 0 Then
                                strLeftString = Trim( Left( strLine, intEqualPos - 1 ) )
                        If LCase( strLeftString ) = LCase( strKey ) Then
                                ReadIni = Trim( Mid( strLine, intEqualPos + 1 ) )
                                If ReadIni = "" Then
                                        ReadIni = " "
                                End If
                                Exit Do
                        End If
                End If

                If objIniFile.AtEndOfStream Then Exit Do
                        strLine = Trim( objIniFile.ReadLine )
                        Loop
                        Exit Do
                End If
                Loop
                objIniFile.Close
        Else
      MsgBox strFilePath & " не найден", vbCritical, "Ошибка"
        Wscript.Quit 1
    End If
End Function

ну и пример использования... необходимая секция из wincmd.ini
Code:
[ExternalApplication]
; По умолчанию
default=%COMMANDER_PATH%   oolswin32
otepad++
otepad++.exe
; Внешние утилиты
exe=wscript "%COMMANDER_PATH%   oolswin32
estorator
estorator.vbs"
iso=wscript "%COMMANDER_PATH%   oolswin32ultraisoultraiso.vbs"
ico=%COMMANDER_PATH%   oolswin32icofxicofx.exe
psd=%COMMANDER_PATH%   oolswin32photoshopphotoshop.exe


Last edited by skole on Sun Feb 26, 2012 09:41; edited 1 time in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10315
Location: Россия, Саратов

Post (Separately) Posted: Wed Feb 22, 2012 12:27    Post subject: Reply with quote

skole
По прежнему расположению в "Обмене кнопками" — нет, не в тему. Эта часть поста перенесена в более подходящее место.
Кстати, описания первых двух скриптов тоже следовало бы указывать как комментарии в самих скриптах.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
skole



Joined: 31 Dec 2004
Posts: 162
Location: Россия, Оренбург

Post (Separately) Posted: Sun Feb 26, 2012 09:39    Post subject: Reply with quote

Avada
ну я из своей сборки просто скопировал... описание скрипта жирным выделено Smile
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
Goto page Previous  1, 2, 3 ... 22, 23, 24 ... 40, 41, 42  Next
Page 23 of 42

 
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