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 

Удаление одинаковых кнопок со всех панелей инструментов ТС
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
ice_daemon



Joined: 07 Jun 2013
Posts: 23

Post (Separately) Posted: Sun Nov 08, 2015 03:24    Post subject: Удаление одинаковых кнопок со всех панелей инструментов ТС Reply with quote

Есть 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 другие с каждой панели соответственно

Помогите, пожалуйста, кто силен в скриптах
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Nov 08, 2015 05:07    Post subject: Reply with quote

ice_daemon
Откуда батник?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Sun Nov 08, 2015 11:09    Post subject: Reply with quote

ice_daemon
Меня тоже интересует источник. И как верно было замечено, это не скрипт, а батник. Так что заголовок темы меняю.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Sun Nov 08, 2015 14:16    Post subject: Reply with quote

Судя по всему, идея - иметь несколько переключаемых панелей с общим набором кнопок? А выпадающие в виде меню панели для этого не подойдут? Общие кнопки ведь можно вынести в подпанель.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Nov 08, 2015 17:48    Post subject: Reply with quote

MVV
Выпадение меню как-то решает проблему наличия в них ненужных одинаковых кнопок?
И потом, панели с общим набором всяко легче использовать именно в стандартном виде, особенно когда совпадает один из рядов.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
ice_daemon



Joined: 07 Jun 2013
Posts: 23

Post (Separately) Posted: Sun Nov 08, 2015 18:18    Post subject: Reply with quote

Батник уже не помню откуда, пару лет назад кто-то помог написать (или отсюда или с CyberForum'a)
Батник использовался для добавления кнопок в отдельную панель "избранное", но на нее все равно приходится переключаться.

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


Last edited by ice_daemon on Sun Nov 08, 2015 23:45; edited 1 time in total
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Sun Nov 08, 2015 23:31    Post subject: Reply with quote

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



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

Post (Separately) Posted: Tue Nov 10, 2015 09:09    Post subject: Reply with quote

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

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
ice_daemon



Joined: 07 Jun 2013
Posts: 23

Post (Separately) Posted: Tue Nov 17, 2015 23:52    Post subject: Reply with quote

вот видео, для чего это нужно
http://rghost.ru/private/8LlnSH6V7/28155f61f78b868b176bb9abcf703113
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Wed Nov 18, 2015 13:38    Post subject: Reply with quote

Если это намёк на упрощённый вариант исключительно для последних кнопок (потенциально только что добавленных), то:
 RemoveLastButtonFromDefinedToolbars.vbs

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
ice_daemon



Joined: 07 Jun 2013
Posts: 23

Post (Separately) Posted: Fri Nov 20, 2015 13:48    Post subject: Reply with quote

Flasher
Большое спасибо, но не совсем

Новая строка в панели начинается после "кнопки" с параметром -2.
Хотелось бы, чтобы при нажатии на кнопку с модификатором (условно Shift+click, реализуется через ButtonBar eXtended), скрипт определял на каком месте относительно "-2" находится кнопка, удалял ее, и кнопки находящиеся на этом же месте в других панелях.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Nov 20, 2015 14:20    Post subject: Reply with quote

ice_daemon
А зачем именно после -2? Если есть опасения по совпадению, то в первом скрипте на 57 строке 1 меняется на номер слудующей за -2 кнопки.
Определить же на каком месте кнопка под курсором (пусть даже на AHK/AutoIt) весьма проблематично (если вообще возможно с учётом разноплановости межкнопочных расстояний при разных темах), я этим точно заниматься не буду.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
ice_daemon



Joined: 07 Jun 2013
Posts: 23

Post (Separately) Posted: Sat Dec 05, 2015 18:58    Post subject: Reply with quote

а не подскажите как сделать, чтобы код кнопки при нажатии копировался в буфер?
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Sat Dec 05, 2015 19:15    Post subject: Reply with quote

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



Joined: 07 Jun 2013
Posts: 23

Post (Separately) Posted: Sat Dec 05, 2015 21:17    Post subject: Reply with quote

С контекстным меню понятно, но может быть есть команда какая-нибудь которая передаёт код кнопки в буфер. Нужно для следующего, нажал кнопку с зажатым Shift'ом например, код кнопки записался в буфер и далее с ним манипулировать
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 1, 2  Next
Page 1 of 2

 
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