View previous topic :: View next topic |
Author |
Message |
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sat Mar 28, 2015 22:52 Post subject: |
|
|
Затих что-то я в последнее время... Надо чем-то полезным выделиться.
Скрипт AutoHotkey для выделения зеброй.
При Branch view не работает.
При отображении файлов без каталогов теперь работает!
Зато нет ограничений на количество файлов в каталоге и выделение происходит очень быстро - system32 c около 4000 файлами - за секунду или быстрее; WinSxS с 22000 файлов с длинными именами - за 8-10 секунд.
Скрипт с параметрами.
Если не задавать параметры вообще - то выделяются через один файлы и каталоги, начиная с первого.
Если задать два параметра - то выделение происходит через один
Если задать один параметр - то выделение происходит через один, начиная с первого.
Code: | ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Script: SelectionZebra.ahk
; Build: 1.4 (2013.06.11-2015.04.20)
; Author: LonerD
; OfSite: http://dreamlair.net
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Выделение объектов в панели зеброю.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Parameters:
; 1) Selection mode:
; 1 - all; 2 - only files; 3 - only dirs
; 2) Selection position:
; 1 - begin from 1st file; 2 - from 2nd; 10 - from 10th
; 3) Selection range:
; 2 - each 2nd file, 3 - each third file etc
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Параметры:
; 1) Метод выделения:
; 1 - всё; 2 - только файлы; 3 - только каталоги
; 2) Позиция выделения:
; с какого файла начать выделение (с первого, второго, ... десятого, ... ит.д.)
; 3) Порядок выделения:
; 2 - каждый второй файл, 3 - каждый третий и т.д...
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#NoEnv
#NoTrayIcon
#SingleInstance force
SetBatchLines, -1
Mode = %1%
First = %2%
Range = %3%
If 0 < 3
Range = 2
If 0 < 2
First = 1
If Mode not in 1,2,3
Mode = 1
WinGet, TCHWND, ID, ahk_class TTOTAL_CMD
DllCall("LockWindowUpdate", "uint", TCHWND)
ClipSaved := ClipboardAll
Clipboard := ""
SendMessage, 0x433, 2029,,, ahk_class TTOTAL_CMD
Path := Clipboard . "\"
SendMessage, 0x433, 524,,, ahk_class TTOTAL_CMD
SendMessage, 0x433, 330 . Mode,,, ahk_class TTOTAL_CMD
SendMessage, 0x433, 2021,,, ahk_class TTOTAL_CMD
Sleep, 100
FileList := Clipboard
Sleep, 100
Loop, Parse, FileList, `n, `r
{
Strings := A_Index
if ( Strings > 1 )
Break
}
if ( Strings = 1 )
{
SendMessage, 0x433, 3321,,, ahk_class TTOTAL_CMD
SendMessage, 0x433, 2021,,, ahk_class TTOTAL_CMD
SendMessage, 0x433, 524,,, ahk_class TTOTAL_CMD
Sleep, 100
FileList2 := Clipboard
Sleep, 100
Loop, Parse, FileList2, `n, `r
{
Strings2 := A_Index
if ( Strings2 > 1 )
Break
}
if ( Strings2 > 1 )
{
Loop, Parse, FileList2, `n, `r
{
if ( FileList = A_LoopField )
Goto, Exit
}
}
}
SendMessage, 0x433, 524,,, ahk_class TTOTAL_CMD
StringReplace, Path, Path, `\`\, `\, All
StringReplace, FileList, FileList, % Path, , All
FileListSel := ""
Loop, Parse, FileList, `n, `r
{
if ( Mod(A_Index - First + 1,Range) = 1 )
FileListSel := FileListSel "`r`n" A_LoopField
}
Clipboard := FileListSel
SendMessage, 0x433, 2033,,, ahk_class TTOTAL_CMD
Exit:
Clipboard := ClipSaved
ClipSaved := ""
FileList := ""
FileListSel := ""
DllCall("LockWindowUpdate", "uint", 0)
Exit
|
_________________ Win11 x64 Eng | TC DreamLair eternal pre-α
Last edited by LonerD on Mon Apr 20, 2015 18:57; edited 11 times in total |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Apr 18, 2015 02:45 Post subject: |
|
|
LonerD
спасибо за скрипт! а если не через один файл, а два? можно ли как-нибудь переделать скрипт под эту задачу? |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sat Apr 18, 2015 05:43 Post subject: |
|
|
Hjkma
Пожалуйста.
Через два файла:
заменить
if ( Mod(A_Index,2) = 1 )
на
if ( Mod(A_Index,3) = 1 )
или
if ( Mod(A_Index,3) = 0 )
(соответственно в первом случае выделится 1,4,7 и т.д. файлы, а во втором случае - 3,6,9 и т.д.) _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Apr 18, 2015 14:51 Post subject: |
|
|
LonerD
Большое вам спасибо! Из всех скриптов, который я находил, именно Ваш наиболее удобный и простый в использовании! |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Apr 18, 2015 14:56 Post subject: |
|
|
Hjkma wrote: | наиболее удобный | Это вряд ли. Опций нет. Всё подряд выделяет. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Sat Apr 18, 2015 19:31 Post subject: |
|
|
Flasher
Кстати, твой скрипт, по ссылке из второго сообщения темы, с опциями 1 (всё) и 3 (только папки) тоже выделяет зеброй все папки, независимо от положения курсора в папках. Так и задумано? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Apr 18, 2015 23:10 Post subject: |
|
|
Нет, конечно. Там со слэшем на конце какая-то история. Видимо, в тогдашней версии ТС он был не нужен.
Code: | '================================================================
' Выделить с заданным интервалом, начиная с элемента под курсором
' Условие: необходим компонент Script Helper ActiveX for TC
' Параметры: %Z%V <режим выделения> <шаг>
' Режим выделения: 1 - всё; 2 - только файлы; 3 - только папки
' Пример: %Z%V 2 5
' Автор: Flasher ©
'================================================================
Option Explicit
Dim V, Mode, Step, D, FSO, F, P, T1, T, Cl, List, T2, Start, i, n, Sp
With WScript.Arguments
V = .Item(0) : Mode = .Item(1) : Step = .Item(2)
End With : Set D = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
With CreateObject("TCScript.Helper")
F = Right(V, 1) : P = .GetSrcPath : V = Left(P, 1) & Mid(V, 2)
If F = "\" And P <> "" Then P = V Else T1 = 1
.Pause = 0 : .Wait = True : .LockTC True : T = .GetTextFromClip
.SendCommand 524, True : If F = "\" Then .SendKeystroke "{DOWN}"
.SendCommand 2018, True : Cl = .GetTextFromClip
If Mode = 3 And Right(Cl, 1) <> "\" Then Quit
.SendCommand 330&Mode, True : List = .GetSrcSelectedFiles(1)
If Mode = 2 And Right(Cl, 1) = "\" Then Cl = List(0)
If FSO.FileExists(P) And FSO.GetParentFolderName(V) <> P Then T2 = 1
If P <> "" Then P = FSO.BuildPath(P, "\")
If P = "" Or T2 Then Start = Cl Else Start = Mid(Cl, Len(P) + 1)
If UBound(List) = 0 Then
If (Right(List(0),1) <> "\" And Mode = 3) Or (Right(List(0),1) = "\" And Mode = 2) Then Quit
End If : If F = "\" Then .SendKeystroke "{UP}"
i = 0 : If T1 And T2 Then P = ""
If P <> "" Then List = Split(vbCr & Join(List, vbCr), vbCr & P)
For Each F in List : D.Add F, i : i = i + 1 : Next
If D.Item(Start) = "" Then Start = 1 Else Start = D.Item(Start)
For n = Start To UBound(List)
Sp = Sp & List(n) & vbNewLine : n = n + Step
Next : .SendCommand 524, True : .SetTextToClip(Sp)
.SendCommand 2033, True : .LockTC False : .SetTextToClip(T)
End With
Sub Quit
With CreateObject("TCScript.Helper")
If F = "\" Then .SendKeystroke "{UP}"
.SendCommand 524, True : .LockTC False : .SetTextToClip(T)
End With : WScript.Quit
End Sub |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Thu Apr 30, 2015 13:45; edited 21 times in total |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Sun Apr 19, 2015 00:08 Post subject: |
|
|
Flasher wrote: | Там со слэшем на конце какая-то история. Видимо, в тогдашней версии ТС он был не нужен. | Полагаю, что проблема существовала с самого начала: проверил на TC 7.56a – всё точно также.
С новым скриптом появилась ошибка в виде без подкаталогов и не решилась предыдущая проблема при выделении зеброй в архивах. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 19, 2015 01:10 Post subject: |
|
|
sa wrote: | С новым скриптом появилась ошибка в виде без подкаталогов | Появилась или была? Такая задача изначально не ставилась, поэтому я её не стал реализовывать. Не вижу практической пользы выделять зеброй в таком режиме.
sa wrote: | не решилась предыдущая проблема при выделении зеброй в архивах | С %Z? Для определения типа элемента под курсором как минимум архиватор нужен. Стоит ли с этим заморачиваться? Другой вариант - дублировать имя со слешэм. Т.е. список будет вдвое больше. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Sun Apr 19, 2015 02:04 Post subject: |
|
|
Flasher wrote: | Появилась или была? | Сообщение об ошибке раньше не выскакивало, а выделение, в самом деле, работало не верно. Flasher wrote: | Не вижу практической пользы выделять зеброй в таком режиме. | А вот в скрипте от Volniy, на который я ссылался в пятом сообщении темы, этот вопрос решён. Догадаешься, кто поднял вопрос про кривизну срабатывания в таком режиме? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 19, 2015 03:35 Post subject: |
|
|
sa wrote: | Догадаешься, кто поднял вопрос про кривизну срабатывания в таком режиме? | Поднял не с практической целью, а для информации, чтобы отметить. Ладно, ерунда, сделано.
Проблему архивов тоже решил. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sun Apr 19, 2015 18:20 Post subject: |
|
|
Flasher wrote: | Опций нет. Всё подряд выделяет. |
Окей. Теперь есть опции. Можно выбрать выделение файлов/каталогов/всего, можно выбрать с какого файла/каталога начинать выделение и сколько пропускать при выделении. _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 19, 2015 19:18 Post subject: |
|
|
Что-то криво выделяет. То через 3, то через 5, часть подряд, часть не выделено, потом опять, половину каталогов может не выделить, первый параметр вообще ничего не даёт.
"0 - с n-го файла/каталога" - какая-то странная опция. В чём его практический смысл? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sun Apr 19, 2015 19:45 Post subject: |
|
|
Flasher wrote: | Что-то криво выделяет. То через 3, то через 5, часть подряд, часть не выделено, потом опять, половину каталогов может не выделить, |
Попробуй перед
Clipboard := FileListSel
Вставить
msgbox, % FileList
msgbox, % FileListSel
(отобразится список всех обрабатываемых файлов/каталогов, а затем список выделяемых)
Случайно не в Branch view выделяешь? Такой вариант не поддерживается.
Flasher wrote: | первый параметр вообще ничего не даёт. |
Да, исправил.
Flasher wrote: | "0 - с n-го файла/каталога" - какая-то странная опция. В чём его практический смысл? |
Например, нужно выделить каждый третий файл.
При параметре равном 1 выделяются 1, 4, 7, 10 и т.д. файлы.
При параметре равном 0 выделяются 3, 6, 9, 12 и т.д. файлы
Уже не важно. Ещё немного усовершенствовал. Теперь выделение начинается с того файла/каталога, номер которого указан во втором параметре (по умолчанию с первого) _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 19, 2015 21:53 Post subject: |
|
|
LonerD wrote: | отобразится список всех обрабатываемых файлов/каталогов, а затем список выделяемых | Пусто. А с шагом 1 вообще ничего не выделяет.
LonerD wrote: | Случайно не в Branch view выделяешь? Такой вариант не поддерживается. | Не в нём. А что мешает сделать?
LonerD wrote: | Теперь выделение начинается с того файла/каталога, номер которого указан во втором параметре (по умолчанию с первого) | Ну, это же неудобно параметры каждый раз править. Как у меня не хочешь сделать? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
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
|