View previous topic :: View next topic |
Author |
Message |
ice_daemon
Joined: 07 Jun 2013 Posts: 23
|
(Separately) Posted: Sun Nov 08, 2015 03:24 Post subject: Удаление одинаковых кнопок со всех панелей инструментов ТС |
|
|
Есть 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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Nov 08, 2015 05:07 Post subject: |
|
|
ice_daemon
Откуда батник? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10261 Location: Россия, Саратов
|
(Separately) Posted: Sun Nov 08, 2015 11:09 Post subject: |
|
|
ice_daemon
Меня тоже интересует источник. И как верно было замечено, это не скрипт, а батник. Так что заголовок темы меняю. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Nov 08, 2015 17:48 Post subject: |
|
|
MVV
Выпадение меню как-то решает проблему наличия в них ненужных одинаковых кнопок?
И потом, панели с общим набором всяко легче использовать именно в стандартном виде, особенно когда совпадает один из рядов. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ice_daemon
Joined: 07 Jun 2013 Posts: 23
|
(Separately) Posted: Sun Nov 08, 2015 18:18 Post subject: |
|
|
Батник уже не помню откуда, пару лет назад кто-то помог написать (или отсюда или с CyberForum'a)
Батник использовался для добавления кнопок в отдельную панель "избранное", но на нее все равно приходится переключаться.
Сейчас пытаюсь сделать, чтобы "избранное" второй строкой на всех панелях присутствовало. По панелям щелкаешь, а вторая строка неизменна, удобно, но приходится потом руками удалять с каждой панели кнопку, хотелось бы как-то автоматизировать процесс
Last edited by ice_daemon on Sun Nov 08, 2015 23:45; edited 1 time in total |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10261 Location: Россия, Саратов
|
(Separately) Posted: Sun Nov 08, 2015 23:31 Post subject: |
|
|
ice_daemon
Заглавные буквы и знаки препинания (включая точки) в русском языке никто не отменял. Это относится и к нашему форуму, который не надо путать с чатом. Пишите нормально, вас трудно читать и понимать. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Nov 10, 2015 09:09 Post subject: |
|
|
ice_daemon, пару точек таки пропустил.
Помозговал я тут, вот что получилось (тестировать сперва на копиях):
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 |
|
|
ice_daemon
Joined: 07 Jun 2013 Posts: 23
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Nov 18, 2015 13:38 Post subject: |
|
|
Если это намёк на упрощённый вариант исключительно для последних кнопок (потенциально только что добавленных), то:
RemoveLastButtonFromDefinedToolbars.vbs Code: | '============================= 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 |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ice_daemon
Joined: 07 Jun 2013 Posts: 23
|
(Separately) Posted: Fri Nov 20, 2015 13:48 Post subject: |
|
|
Flasher
Большое спасибо, но не совсем
Новая строка в панели начинается после "кнопки" с параметром -2.
Хотелось бы, чтобы при нажатии на кнопку с модификатором (условно Shift+click, реализуется через ButtonBar eXtended), скрипт определял на каком месте относительно "-2" находится кнопка, удалял ее, и кнопки находящиеся на этом же месте в других панелях. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Nov 20, 2015 14:20 Post subject: |
|
|
ice_daemon
А зачем именно после -2? Если есть опасения по совпадению, то в первом скрипте на 57 строке 1 меняется на номер слудующей за -2 кнопки.
Определить же на каком месте кнопка под курсором (пусть даже на AHK/AutoIt) весьма проблематично (если вообще возможно с учётом разноплановости межкнопочных расстояний при разных темах), я этим точно заниматься не буду. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
ice_daemon
Joined: 07 Jun 2013 Posts: 23
|
(Separately) Posted: Sat Dec 05, 2015 18:58 Post subject: |
|
|
а не подскажите как сделать, чтобы код кнопки при нажатии копировался в буфер? |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10261 Location: Россия, Саратов
|
(Separately) Posted: Sat Dec 05, 2015 19:15 Post subject: |
|
|
ice_daemon
Если в контекстном меню кнопки выбрать "Копировать", код копируется в буфер. Что ещё хочется нажимать и зачем?
Про заглавные буквы предупреждение уже было. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
ice_daemon
Joined: 07 Jun 2013 Posts: 23
|
(Separately) Posted: Sat Dec 05, 2015 21:17 Post subject: |
|
|
С контекстным меню понятно, но может быть есть команда какая-нибудь которая передаёт код кнопки в буфер. Нужно для следующего, нажал кнопку с зажатым Shift'ом например, код кнопки записался в буфер и далее с ним манипулировать |
|
Back to top |
|
|
|
|
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
|