View previous topic :: View next topic |
Author |
Message |
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Thu Jun 13, 2013 22:14 Post subject: |
|
|
MVV wrote: | Думаю, гораздо проще послать команду сохранения выделения в файл и перехватить диалог выбора файла |
А что полезного это может дать?
Сохранение выделения в файл, сохранение выделения в буфер - при отсутствии выделения в панели считают невыделенный файл под курсором как выделенный и сохраняют его. И только связка команд 530-529 может отличить реальное выделение, причём корректно работает даже со строкой перехода на уровень выше. _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Thu Jun 13, 2013 23:24 Post subject: |
|
|
Когда-то применял функцию определения наличия выделения (SelectYes), посылая нажатия в диалог настройки списка исключений:
Code: | Dim FSO, TCS, S
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
S = TCS.INIRead (TCS.MainINI, "Configuration", "IgnoreListFile", 0)
If SelectYes Then
TCS.INIWrite TCS.MainINI, "Configuration", "IgnoreListFile", S
MsgBox "Выделение есть!", vbSystemModal
Else
MsgBox "Нет выделения!", vbSystemModal
End If
Set FSO = Nothing
Set TCS = Nothing
Wscript.Quit
Function SelectYes()
TCS.SendCommand 480 'cm_IgnoreConfig
TCS.Pause = 0
TCS.SendKeystroke "+{TAB 6}{ENTER}010{ENTER}{LEFT}{TAB 4}{ENTER}"
TCS.Pause = 50
If FSO.GetBaseName(TCS.INIRead (TCS.MainINI, "Configuration", "IgnoreListFile", 0)) = "010" Then
SelectYes = 1
Else
SelectYes = 0
End If
End Function
|
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 13, 2013 23:29 Post subject: |
|
|
LonerD wrote: | В частности пока не могу понять и воспроизвести алгоритм работы восстановления выделения по нажатию Esc в плагине TwinKey | Что именно в описанном в справке алгоритме не соответствует текущему поведению (обращаю внимание на последние 3 пункта)?
LonerD wrote: | И только связка команд 530-529 может отличить реальное выделение | Не только. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Fri Jun 14, 2013 02:23 Post subject: |
|
|
sa
Спасибо. Мудрёные манипуляции, но приму к сведению как вариант.
Flasher
Quote: | Что именно в описанном в справке алгоритме не соответствует текущему поведению (обращаю внимание на последние 3 пункта)? |
Текущему поведению соответствует всё, что описано в справке относительно этой команды.
Цель - понять каким образом это всё работает (алгоритм работы) и, если возможно, воспроизвести на скриптовых языках. В первую очередь - каким образом можно проверить наличие выделения в панели и сохранить первоначальное выделение если таковое имеется.
Честно говоря - совсем не могу понять как работает твой скрипт (точнее как работает ключевой фрагмент с проверкой выделения в случае одного файла).
Например, имеем файлы 1, 2 и 3. Курсор на файле 1. Выполняем твой скрипт (имена выделенных файлов отправляются в переменные).
Если файл 1 выделен, то N1 = 2,3 а N2 = 1
Если файл 1 не выделен (то есть в панели нет выделения), то N1 = 1,2,3 а N2 = 1
(не через запятую, разумеется, а каждый с новой строки, но суть думаю понятна).
В обоих случаях (если есть выделение и если его нет) - переменные будут ведь различаться! Так что даёт сравнение N1 и N2 ? _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jun 14, 2013 03:09 Post subject: |
|
|
LonerD wrote: | В первую очередь - каким образом можно проверить наличие выделения в панели и сохранить первоначальное выделение если таковое имеется. | Если ты внимательно читал, то там нет отслеживания выделения одного файла.
LonerD wrote: | то N1 = 2,3 а N2 = 1
...
то N1 = 1,2,3 а N2 = 1 | Нет. Там сравнивается только первый элемент массива > (0)(0) при условии If C = 3 And P1 = P2.
LonerD wrote: | не через запятую, разумеется, а каждый с новой строки | Почему с новой?
Вообще-то там неверный алгоритм. Почему-то раньше работало (особо не тестировал тогда). Лучше так: Code: | If C = 3 And P1 = P2 Then
If FSO.FileExists(P2) Then
With CreateObject("TCScript.Helper")
.LockTC True : .SendCommand(525)
For Each i in .GetSrcSelectedFiles(0)
If i = FSO.GetFileName(P1) Then
Test = 1 : Exit For
End If
Next : .SendCommand(525) : .LockTC False
End With : If Test Then WSH.Exec Ed Else WSH.Exec Ed & " " & P1
Else WSH.Exec Ed
End If
Quit
End If | Один минус - если файл в папке один, то выделение ничего не даст. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Fri Jun 14, 2013 11:11; edited 1 time in total |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Fri Jun 14, 2013 04:15 Post subject: |
|
|
Quote: | Там сравнивается только первый элемент массива > (0)(0). |
Тогда понятно.
Хотя проще от этого не стало...
Чтобы короче было. При копировании имён каждое имя помещается в списке с новой строки, я для краткости записал всё через запятую _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2567
|
(Separately) Posted: Fri Jun 14, 2013 09:09 Post subject: |
|
|
LonerD wrote: | Мудрёные манипуляции |
Вся мудрёность сводится к тому, что при наличии выделения, кнопки диалога “Добавить все выделенные с путями” и “Добавить все выделенные” активированы и нажатия приводят к появлению в ключе IgnoreListFile wincmd.ini нового имени файла (010) для списка исключений, а при отсутствии выделения те же нажатия приводят на кнопку отмены диалога и ключ IgnoreListFile не изменяется. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jun 14, 2013 11:17 Post subject: |
|
|
LonerD wrote: | При копировании имён каждое имя помещается в списке с новой строки | Откуда там копирование и строки? Это массив. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Sat Sep 20, 2014 14:03 Post subject: |
|
|
Есть ли какой-нить скриптик, аналог комманды cm_CopyNamesToClip, только чтоб без расширения копировалось |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Sep 20, 2014 14:12 Post subject: |
|
|
Dimsok
Поиск сломался? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Sat Sep 20, 2014 15:59 Post subject: |
|
|
Ломается периодически, вместе с сайтом. Вообще не могу зайти ни на этот, ни на родственный, который англоязычный |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Sep 20, 2014 16:18 Post subject: |
|
|
А так? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Tue Apr 28, 2015 01:40 Post subject: |
|
|
.
.
Полон форум программистов, скриптописателей и околототальных людей, и за три года никто не подсказал о командах Тоталу и прямом считывании информации...
В общем, вот такое манюнькое решение получилось на AHK.
Code: | ; Copy to clipboard list of only selected files and directories.
; Копирование в буфер обмена списка только выделенных файлов и каталогов.
#NoEnv
#NoTrayIcon
#MaxMem 1024
#SingleInstance force
SetBatchLines, -1
If not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
ExitApp
Clipboard := ""
WinGet, hw_TTOTAL_CMD, ID, A
ControlGetFocus, aControl, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 0x190, , , % aControl, % "ahk_id " hw_TTOTAL_CMD
CountItems = %ErrorLevel%
SendMessage, 0x187, 0, , % aControl, % "ahk_id " hw_TTOTAL_CMD
UpLevel = %ErrorLevel%
if (( CountItems > 1 ) || ( ( CountItems = 1 ) && ( UpLevel != 1 )))
SendMessage, 0x433, 2021,,, % "ahk_id " hw_TTOTAL_CMD
ExitApp |
Уже перед публикацией заметил одно ограничение - скрипт неполноценно работает, если в корне диска выделен один файл, и при этом в настройках Тотала отключена строка перехода на уровень выше .. (а также в виртуальных каталогах). Если пойму как побороть - дополню решение (точнее я уже знаю решение через WM_COPYDATA, но оно неэлегантное и раздует скрипт раза в три).
Также подозреваю, что есть решение через LB_GETSELITEMS без задействования буфера обмена, но пока не знаю как это сделать. _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Apr 28, 2015 09:32 Post subject: |
|
|
LonerD
Пытаюсь найти хотя бы один повод, когда бы такой скрипт понадобился и не могу. Поэтому и задавал вопросы (1, 2). _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Tue Apr 28, 2015 14:22 Post subject: |
|
|
Flasher wrote: | LonerD
Пытаюсь найти хотя бы один повод, когда бы такой скрипт понадобился и не могу. |
Я отвечал зачем мне это было нужно тогда. (уж точно не помню как именно я хотел реализовывать через список файлов, но задумка была на это).
Сейчас мне это понадобилось для скрипта выделения зеброй. На самом деле (как выяснилось уже в процессе) - проблема решилась "в обратную сторону".
То есть я думал, что нужно получить список файлов, а потом посчитать количество строк в этом списке. А в реальности количество строк можно считать напрямую через LB_GETSELCOUNT (а уж зная LB_GETSELCOUNT можно получить список файлов). _________________ Win11 x64 Eng | TC DreamLair eternal pre-α |
|
Back to top |
|
|
|