Удаление одинаковых кнопок со всех панелей инструментов ТС
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Удаление одинаковых кнопок со всех панелей инструментов ТС Author: ice_daemon PostPosted: Sun Nov 08, 2015 03:24
    —
Есть 4 панели ТС и скрипт, который добавляет выбранную кнопку в конец каждой из 4х панелей (в начало новой строки, после "-2")

пример скрипта для одной панели
Code:

@ECHO off
SETLOCAL enabledelayedexpansion

for /f "tokens=1,2 delims== usebackq" %%i in ("%~dp0..\Bars\_TEMP.bar") do IF /i "%%i"=="Buttoncount" set tcPlusCOUNT=%%j

if DEFINED tcPlusCOUNT goto m2
goto m100
:m2
for /f "tokens=1,2 delims=> usebackq" %%i in ("%~dp0..\Bars\%2.bar") do (
   if /i "%%j"=="%1" (
      set tcPlusPARAM=%%i& set tcPlusPARAM=!tcPlusPARAM:~5,2!
      if "!tcPlusPARAM:~-1!"=="=" set tcPlusPARAM=!tcPlusPARAM:~0,1!
   )
)

if defined tcPlusPARAM goto m3
goto m100
:m3
set /a tcPlusCOUNT=%tcPlusCOUNT%+1

If !tcPlusPARAM! LSS 10 (Set tcPlusPOZ=1) Else Set tcPlusPOZ=2

echo. 2>"%~dp0TEMPTOCOPY.TXT"
( echo.
for /f "tokens=1,2 delims== usebackq" %%i in ("%~dp0..\Bars\%2.bar") do (
   set tcPlusTEST=%%i
   if /i "!tcPlusTEST:~-%tcPlusPOZ%!"=="!tcPlusPARAM!" (
      rem echo.
      echo !tcPlusTEST:~0,-%tcPlusPOZ%!%tcPlusCOUNT%=%%j
      set tcPlusFIND=1
   )
))>>"%~dp0TEMPTOCOPY.TXT"

if DEFINED tcPlusFIND goto m1
del /f /q "%~dp0TEMPTOCOPY.TXT"
goto m100
:m1


type "%~dp0TEMPTOCOPY.TXT">>"%~dp0..\Bars\_TEMP.bar"
del /f /q "%~dp0TEMPTOCOPY.TXT"

call "%~dp0nircmdc.exe" inisetval "%~dp0..\Bars\_TEMP.bar" "Buttonbar" "Buttoncount" "%tcPlusCOUNT%"

:m100
rem удаление переменных
For %%i In (tcPlusCOUNT tcPlusTEST tcPlusFIND cPlusNIRCMDC tcPlusPARAM) Do Set %%i=


Хотелось бы теперь, чтобы при удалении одной из этих добавленных кнопок, удалялись и 3 другие с каждой панели соответственно

Помогите, пожалуйста, кто силен в скриптах

#2:  Author: FlasherLocation: Москва PostPosted: Sun Nov 08, 2015 05:07
    —
ice_daemon
Откуда батник?

#3:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Nov 08, 2015 11:09
    —
ice_daemon
Меня тоже интересует источник. И как верно было замечено, это не скрипт, а батник. Так что заголовок темы меняю.

#4:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Nov 08, 2015 14:16
    —
Судя по всему, идея - иметь несколько переключаемых панелей с общим набором кнопок? А выпадающие в виде меню панели для этого не подойдут? Общие кнопки ведь можно вынести в подпанель.

#5:  Author: FlasherLocation: Москва PostPosted: Sun Nov 08, 2015 17:48
    —
MVV
Выпадение меню как-то решает проблему наличия в них ненужных одинаковых кнопок?
И потом, панели с общим набором всяко легче использовать именно в стандартном виде, особенно когда совпадает один из рядов.

#6:  Author: ice_daemon PostPosted: Sun Nov 08, 2015 18:18
    —
Батник уже не помню откуда, пару лет назад кто-то помог написать (или отсюда или с CyberForum'a)
Батник использовался для добавления кнопок в отдельную панель "избранное", но на нее все равно приходится переключаться.

Сейчас пытаюсь сделать, чтобы "избранное" второй строкой на всех панелях присутствовало. По панелям щелкаешь, а вторая строка неизменна, удобно, но приходится потом руками удалять с каждой панели кнопку, хотелось бы как-то автоматизировать процесс


Last edited by ice_daemon on Sun Nov 08, 2015 23:45; edited 1 time in total

#7:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Nov 08, 2015 23:31
    —
ice_daemon
Заглавные буквы и знаки препинания (включая точки) в русском языке никто не отменял. Это относится и к нашему форуму, который не надо путать с чатом. Пишите нормально, вас трудно читать и понимать.

#8:  Author: FlasherLocation: Москва PostPosted: Tue Nov 10, 2015 09:09
    —
ice_daemon, пару точек таки пропустил. Smile

Помозговал я тут, вот что получилось (тестировать сперва на копиях):
Code:
'============================= VBS ==============================
' Удалить с панелей инструментов кнопку по коду из буфера обмена

' Параметры: "<путь к каталогу c BAR-файлами>" <имена BAR-файлов>
' Пример:    "%%COMMANDER_PATH%%\ButtonBars" Default.bar User.bar

' Автор - Flasher ©
'================================================================

Option Explicit
Dim Arg, Cnt, WSH, C, K, Clip, Keys, FSO, Path, Src, FPath, Chek

Set Arg = WScript.Arguments : Cnt = Arg.Count
If Cnt < 2 Then Msg "Укажите не менее 2-х параметров!", 4144
C = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
Set WSH = CreateObject("WScript.Shell")
With WSH
  On Error Resume Next
  K = .RegRead(C) : If K > 0 Or Err.Number <> 0 Then .RegWrite C, 0, "REG_DWORD"
  Clip = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
  If K > 0 Then .RegWrite C, K, "REG_DWORD"
  On Error Goto 0
End With
If Trim(Clip) = "" Then _
Msg "Буфер обмена не содержит текстовых данных!", 4144
C = Split(Clip, vbNewLine) : If C(0) <> "TOTALCMD#BAR#DATA" Then _
Msg    "В буфере обмена отсутствует код кнопки!", 4144

With New RegExp
  .Global = True : .Pattern = "([\$\(\)\*\+\.\[\?\^\{\|\\])"
  For K = 1 to 6
    C(K) = .Replace(C(K), "\$1")
    If Left(C(K), 1) = """" Then C(K) = """" & C(K) & """"
  Next : .Global = False
End With : Keys = "(cmd|param|button|menu|path|iconic)"
Set FSO = CreateObject("Scripting.FileSystemObject")
Path = WSH.ExpandEnvironmentStrings(Arg(0))
Src  = "^(Buttoncount=)[1-9][0-9]*$"
For K = 1 To Cnt - 1
  FPath = FSO.BuildPath(Path, Arg(K))
  If FSO.FileExists(FPath) Then Repl FPath, Chek
Next : If Chek Then _
Msg "Кнопка удалена со всех заданных панелей инструментов!", 4160
Msg  "Кнопка отсутствует на заданных панелях инстурментов!", 4144

Sub Msg(Text, Num)
  MsgBox Text, Num, " Удаление кнопки c панелей инструментов ТС      "
  WScript.Quit
End Sub

Sub Repl(BarFile, Test)
  Dim All, Count, n, i
  All = FSO.OpenTextFile(BarFile).ReadAll
  With New RegExp
    .Multiline = True : .Pattern = Src
    Count = Split(.Execute(All)(0),"=")(1)
    For n = 1 To Count
      .Pattern = "^cmd" & n & "=" & C(1) & "$"
      If .Test(All) Or C(1) = "" Then
        .Pattern = "^param" & n & "=" & C(2) & "$"
        If .Test(All) Or C(2) = "" Then
          .Pattern = "^button" & n & "=" & C(3) & "$"
          If .Test(All) Or C(3) = "" Then
            .Pattern = "^menu" & n & "=" & C(4) & "$"
            If .Test(All) Or C(4) = "" Then
              .Pattern = "^path" & n & "=" & C(5) & "$"
              If .Test(All) Or C(5) = "" Then
                .Pattern = "^iconic" & n & "=" & C(6) & "$"
                If .Test(All) Or C(6) = "" Then
                  .Pattern = Src : All = .Replace(All, "$1" & Count - 1)
                  .Global = True : .Pattern = "(\r?\n|^)" & Keys & n & "=.*$"
                  All = .Replace(All, "") : Test = 1
                  For i = n + 1 To Count
                    .Pattern = "^" & Keys & i & "(=.*)$"
                    All = .Replace(All, "$1" & i - 1 & "$2")
                  Next : Count = Count - 1 : .Global = False
                End If
              End If
            End If
          End If
        End If
      End If
    Next
    If Test Then
      With FSO.OpenTextFile(BarFile, 2) : .Write All : .Close : End With
    End If
  End With
End Sub

#9:  Author: ice_daemon PostPosted: Tue Nov 17, 2015 23:52
    —
вот видео, для чего это нужно
http://rghost.ru/private/8LlnSH6V7/28155f61f78b868b176bb9abcf703113

#10:  Author: FlasherLocation: Москва PostPosted: Wed Nov 18, 2015 13:38
    —
Если это намёк на упрощённый вариант исключительно для последних кнопок (потенциально только что добавленных), то:
 RemoveLastButtonFromDefinedToolbars.vbs

#11:  Author: ice_daemon PostPosted: Fri Nov 20, 2015 13:48
    —
Flasher
Большое спасибо, но не совсем

Новая строка в панели начинается после "кнопки" с параметром -2.
Хотелось бы, чтобы при нажатии на кнопку с модификатором (условно Shift+click, реализуется через ButtonBar eXtended), скрипт определял на каком месте относительно "-2" находится кнопка, удалял ее, и кнопки находящиеся на этом же месте в других панелях.

#12:  Author: FlasherLocation: Москва PostPosted: Fri Nov 20, 2015 14:20
    —
ice_daemon
А зачем именно после -2? Если есть опасения по совпадению, то в первом скрипте на 57 строке 1 меняется на номер слудующей за -2 кнопки.
Определить же на каком месте кнопка под курсором (пусть даже на AHK/AutoIt) весьма проблематично (если вообще возможно с учётом разноплановости межкнопочных расстояний при разных темах), я этим точно заниматься не буду.

#13:  Author: ice_daemon PostPosted: Sat Dec 05, 2015 18:58
    —
а не подскажите как сделать, чтобы код кнопки при нажатии копировался в буфер?

#14:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Dec 05, 2015 19:15
    —
ice_daemon
Если в контекстном меню кнопки выбрать "Копировать", код копируется в буфер. Что ещё хочется нажимать и зачем?
Про заглавные буквы предупреждение уже было.

#15:  Author: ice_daemon PostPosted: Sat Dec 05, 2015 21:17
    —
С контекстным меню понятно, но может быть есть команда какая-нибудь которая передаёт код кнопки в буфер. Нужно для следующего, нажал кнопку с зажатым Shift'ом например, код кнопки записался в буфер и далее с ним манипулировать



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


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

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group