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 Previous  1, 2, 3, ... 10, 11, 12  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sat Mar 28, 2015 22:52    Post subject: Reply with quote

Затих что-то я в последнее время... Надо чем-то полезным выделиться.
Скрипт 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
View user's profile Send private message
Hjkma



Joined: 18 Apr 2015
Posts: 178

Post (Separately) Posted: Sat Apr 18, 2015 02:45    Post subject: Reply with quote

LonerD
спасибо за скрипт! а если не через один файл, а два? можно ли как-нибудь переделать скрипт под эту задачу?
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sat Apr 18, 2015 05:43    Post subject: Reply with quote

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
View user's profile Send private message
Hjkma



Joined: 18 Apr 2015
Posts: 178

Post (Separately) Posted: Sat Apr 18, 2015 14:51    Post subject: Reply with quote

LonerD

Большое вам спасибо! Из всех скриптов, который я находил, именно Ваш наиболее удобный и простый в использовании!
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Apr 18, 2015 14:56    Post subject: Reply with quote

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



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sat Apr 18, 2015 19:31    Post subject: Reply with quote

Flasher
Кстати, твой скрипт, по ссылке из второго сообщения темы, с опциями 1 (всё) и 3 (только папки) тоже выделяет зеброй все папки, независимо от положения курсора в папках. Так и задумано?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Apr 18, 2015 23:10    Post subject: Reply with quote

Нет, конечно. Там со слэшем на конце какая-то история. Видимо, в тогдашней версии ТС он был не нужен.
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
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Apr 19, 2015 00:08    Post subject: Reply with quote

Flasher wrote:
Там со слэшем на конце какая-то история. Видимо, в тогдашней версии ТС он был не нужен.
Полагаю, что проблема существовала с самого начала: проверил на TC 7.56a – всё точно также.
С новым скриптом появилась ошибка в виде без подкаталогов и не решилась предыдущая проблема при выделении зеброй в архивах.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 19, 2015 01:10    Post subject: Reply with quote

sa wrote:
С новым скриптом появилась ошибка в виде без подкаталогов
Появилась или была? Такая задача изначально не ставилась, поэтому я её не стал реализовывать. Не вижу практической пользы выделять зеброй в таком режиме.
sa wrote:
не решилась предыдущая проблема при выделении зеброй в архивах
С %Z? Для определения типа элемента под курсором как минимум архиватор нужен. Стоит ли с этим заморачиваться? Другой вариант - дублировать имя со слешэм. Т.е. список будет вдвое больше.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Apr 19, 2015 02:04    Post subject: Reply with quote

Flasher wrote:
Появилась или была?
Сообщение об ошибке раньше не выскакивало, а выделение, в самом деле, работало не верно.
Flasher wrote:
Не вижу практической пользы выделять зеброй в таком режиме.
А вот в скрипте от Volniy, на который я ссылался в пятом сообщении темы, этот вопрос решён. Догадаешься, кто поднял вопрос про кривизну срабатывания в таком режиме?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 19, 2015 03:35    Post subject: Reply with quote

sa wrote:
Догадаешься, кто поднял вопрос про кривизну срабатывания в таком режиме?
Поднял не с практической целью, а для информации, чтобы отметить. Ладно, ерунда, сделано.

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



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sun Apr 19, 2015 18:20    Post subject: Reply with quote

Flasher wrote:
Опций нет. Всё подряд выделяет.

Окей. Теперь есть опции. Можно выбрать выделение файлов/каталогов/всего, можно выбрать с какого файла/каталога начинать выделение и сколько пропускать при выделении.
_________________
Win11 x64 Eng | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 19, 2015 19:18    Post subject: Reply with quote

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



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sun Apr 19, 2015 19:45    Post subject: Reply with quote

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
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 19, 2015 21:53    Post subject: Reply with quote

LonerD wrote:
отобразится список всех обрабатываемых файлов/каталогов, а затем список выделяемых
Пусто. А с шагом 1 вообще ничего не выделяет.
LonerD wrote:
Случайно не в Branch view выделяешь? Такой вариант не поддерживается.
Не в нём. А что мешает сделать?
LonerD wrote:
Теперь выделение начинается с того файла/каталога, номер которого указан во втором параметре (по умолчанию с первого)
Ну, это же неудобно параметры каждый раз править. Как у меня не хочешь сделать?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
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 Previous  1, 2, 3, ... 10, 11, 12  Next
Page 2 of 12

 
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