Страница 1 из 2
Удаление одинаковых кнопок со всех панелей инструментов ТС
Добавлено: Вс ноя 08, 2015 02:24
ice_daemon
Есть 4 панели ТС и скрипт, который добавляет выбранную кнопку в конец каждой из 4х панелей (в начало новой строки, после "-2")
пример скрипта для одной панели
Код: Выделить всё
@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 другие с каждой панели соответственно
Помогите, пожалуйста, кто силен в скриптах
Добавлено: Вс ноя 08, 2015 04:07
Flasher
ice_daemon
Откуда батник?
Добавлено: Вс ноя 08, 2015 10:09
Avada
ice_daemon
Меня тоже интересует источник. И как верно было замечено, это не скрипт, а батник. Так что заголовок темы меняю.
Добавлено: Вс ноя 08, 2015 13:16
MVV
Судя по всему, идея - иметь несколько переключаемых панелей с общим набором кнопок? А выпадающие в виде меню панели для этого не подойдут? Общие кнопки ведь можно вынести в подпанель.
Добавлено: Вс ноя 08, 2015 16:48
Flasher
MVV
Выпадение меню как-то решает проблему наличия в них ненужных одинаковых кнопок?
И потом, панели с общим набором всяко легче использовать именно в стандартном виде, особенно когда совпадает один из рядов.
Добавлено: Вс ноя 08, 2015 17:18
ice_daemon
Батник уже не помню откуда, пару лет назад кто-то помог написать (или отсюда или с CyberForum'a)
Батник использовался для добавления кнопок в отдельную панель "избранное", но на нее все равно приходится переключаться.
Сейчас пытаюсь сделать, чтобы "избранное" второй строкой на всех панелях присутствовало. По панелям щелкаешь, а вторая строка неизменна, удобно, но приходится потом руками удалять с каждой панели кнопку, хотелось бы как-то автоматизировать процесс
Добавлено: Вс ноя 08, 2015 22:31
Avada
ice_daemon
Заглавные буквы и знаки препинания (включая точки) в русском языке никто не отменял. Это относится и к нашему форуму, который не надо путать с чатом. Пишите нормально, вас трудно читать и понимать.
Добавлено: Вт ноя 10, 2015 08:09
Flasher
ice_daemon, пару точек таки пропустил.
Помозговал я тут, вот что получилось (тестировать сперва на копиях):
Код: Выделить всё
'============================= 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
Добавлено: Вт ноя 17, 2015 22:52
ice_daemon
Добавлено: Ср ноя 18, 2015 12:38
Flasher
Если это намёк на упрощённый вариант исключительно для последних кнопок (потенциально только что добавленных), то:
[cut="RemoveLastButtonFromDefinedToolbars.vbs"]
Код: Выделить всё
'============================= VBS ==============================
' Удалить с указанных панелей инструментов последнюю кнопку
' Параметры: "<путь к каталогу c BAR-файлами>" <имена BAR-файлов>
' Пример: "%%COMMANDER_PATH%%\ButtonBars" Default.bar User.bar
' Автор - Flasher ©
'================================================================
Option Explicit : Dim Title, Arg, Cnt, Path, FSO, Par, FPath, Chek
Title = " Удаление последней кнопки c панелей инструментов "
Set Arg = WScript.Arguments : Cnt = Arg.Count
If Cnt < 2 Then MsgBox "Укажите не менее 2-х параметров!", 4144, Title
Path = CreateObject("WScript.Shell").ExpandEnvironmentStrings(Arg(0))
Set FSO = CreateObject("Scripting.FileSystemObject")
For Par = 1 To Cnt - 1
FPath = FSO.BuildPath(Path, Arg(Par))
If FSO.FileExists(FPath) Then Repl FPath, Chek
Next : If Chek Then _
MsgBox "Кнопка удалена со всех заданных панелей инструментов!", 4160, Title
Sub Repl(BarFile, Test)
Dim All, Count : All = FSO.OpenTextFile(BarFile).ReadAll : Test = 1
With New RegExp
.Multiline = True : .Pattern = "^(Buttoncount=)[1-9][0-9]*$"
Count = Split(.Execute(All)(0),"=")(1) : All = .Replace(All, "$1" & Count - 1)
.Global = True : .Pattern = "\r?\n(cmd|param|button|menu|path|iconic)" &_
Count & "=.*$" : All = .Replace(All, "")
End With : With FSO.OpenTextFile(BarFile, 2) : .Write All : .Close : End With
End Sub
[/cut]
Добавлено: Пт ноя 20, 2015 12:48
ice_daemon
Flasher
Большое спасибо, но не совсем
Новая строка в панели начинается после "кнопки" с параметром -2.
Хотелось бы, чтобы при нажатии на кнопку с модификатором (условно Shift+click, реализуется через ButtonBar eXtended), скрипт определял на каком месте относительно "-2" находится кнопка, удалял ее, и кнопки находящиеся на этом же месте в других панелях.
Добавлено: Пт ноя 20, 2015 13:20
Flasher
ice_daemon
А зачем именно после -2? Если есть опасения по совпадению, то в первом скрипте на 57 строке 1 меняется на номер слудующей за -2 кнопки.
Определить же на каком месте кнопка под курсором (пусть даже на AHK/AutoIt) весьма проблематично (если вообще возможно с учётом разноплановости межкнопочных расстояний при разных темах), я этим точно заниматься не буду.
Добавлено: Сб дек 05, 2015 17:58
ice_daemon
а не подскажите как сделать, чтобы код кнопки при нажатии копировался в буфер?
Добавлено: Сб дек 05, 2015 18:15
Avada
ice_daemon
Если в контекстном меню кнопки выбрать "Копировать", код копируется в буфер. Что ещё хочется нажимать и зачем?
Про заглавные буквы предупреждение уже было.
Добавлено: Сб дек 05, 2015 20:17
ice_daemon
С контекстным меню понятно, но может быть есть команда какая-нибудь которая передаёт код кнопки в буфер. Нужно для следующего, нажал кнопку с зажатым Shift'ом например, код кнопки записался в буфер и далее с ним манипулировать