Что нового

Получить полные пути выделенных файлов в панели Тотал Коммандера

eus_deus

Новичок
Сообщения
118
Репутация
0
Всем доброго дня и хорошего настроения!
Не могу совладать с вопросом - как получить полные пути выделенных файлов в панели Тотал Коммандера? Конечно, проверяя, какая панель активна
Пишу так (правая панель) - не приходит ничего
Код:
; Ожидание 5 секунд до появление окна блокнота
$hWnd = WinWait("[CLASS:TTOTAL_CMD]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
WinActivate ("[CLASS:TTOTAL_CMD]", "")

; извлекаем текст
$GetTxt = ControlGetText('[CLASS:TTOTAL_CMD]', '', '[CLASS:Window; INSTANCE:13]')
MsgBox(4096,"Переменная $GetTxt ","Файл testpath.au3 ~~ Строка 9"&@CRLF&"$GetTxt  =>"&$GetTxt &"<=")

Сколько лет на autoit - а без толку. Ну, знаком я с ним давно, но не углубился...
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
WinMenuSelectItem("[class:TTOTAL_CMD]", "", "&Выделение", "Копировать имена фай&лов с путями")
MsgBox(0, "", ClipGet())
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
Inni, в моем случае так более рабочий вариант - тотал кастомный
Код:
WinActivate ("[CLASS:TTOTAL_CMD]", "")
Send('{F11}')
Sleep(500)
MsgBox(0, '',ClipGet())

Интересно, что не так с ControlGetText ?
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
А что делает в этой ситуации F11?
Вообще то F12, я ошибся. В моем тотале это копирование полных имен выделенных объектов.
Нужную задачу решил так, не совсем верно, но работает вроде бы:
Код:
Local     $hWnd = WinGetHandle("[ACTIVE]"), $Buff, $aSpl, $aPathSpl, $szDrive, $szDir, $szFName, $szExt , $pn, $e
    WinActivate ("[CLASS:TTOTAL_CMD]", "")
    Send('{F12}')
    Sleep(500)
    $Buff = ClipGet()
    WinActivate ($hWnd, "")
    $aSpl = StringSplit($Buff, @CR)
    $aPathSpl = _PathSplit($aSpl[1], $szDrive, $szDir, $szFName, $szExt)
    $pn = $aPathSpl[1]&StringTrimRight($aPathSpl[2], 1)
    $e = StringTrimLeft($aPathSpl[4], 1)
    $Buff = $Buff&'#'&$pn&'#'&$e
    Return $Buff
 

Andrey_A

Продвинутый
Сообщения
319
Репутация
68
как получить полные пути выделенных файлов в панели Тотал Коммандера

1. Если надо получить имена выделенных объектов при запуске скрипта, то скрипту можно передать временный список, в тотале есть параметр %WL

Скрипт:

Код:
#include <Array.au3>

If Not $CmdLine[0]Then Exit
_ArrayDisplay($CmdLine,"Массив $CmdLine")

$aArray=FileReadToArray($CmdLine[1])
_ArrayDisplay($aArray,"Массив $aArray")


Кнопка тотала

Код:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe "%COMMANDER_PATH%\0\_Autoit\Script.au3"
%WL
Wcmicons.dll,1
New_1646


-1

2. Если надо получить имена объектов когда скрипт уже запущен, то можно так:

Код:
#include <GuiListBox.au3>
#include <Array.au3>

Global $hUser32Dll=DllOpen('user32.dll'),$TC_HWND=WinGetHandle('[CLASS:TTOTAL_CMD]')

; Получаем дескриптор активной панели
$hListBox=_Get_Handle_TC_El(3)

; Получаем путь активной панели
$sPath=StringReplace(ControlGetText($TC_HWND,'',_Get_Handle_TC_El(21)),'>','\')

 ; Возвращает общее количество выделенных пунктов
$nCount=_GUICtrlListBox_GetSelCount($hListBox)
If $nCount=0 Then Exit

 ; Возвращает массив с индексами выделенных пунктов
$aItems=_GUICtrlListBox_GetSelItems($hListBox)
$aPath=$aItems

For $i=1 To $nCount
  ; Возвращает текст пункта указанного индекса
  $sName=_GUICtrlListBox_GetText($hListBox,$aItems[$i])
  ; Чистим от мусора - он может быть разным - зависит от настроек тотала ключ GetTextMode в Wincmd.ini в секции [Configuration]
  $sName=StringRegExpReplace($sName,'([^\t]+).*','$1')
  $sName=StringRegExpReplace($sName,'\* ','')
  $aPath[$i]=$sPath&$sName
Next

_ArrayDisplay($aPath,"Массив $aPath")

 ; _Get_Handle_TC_El
; получает хендл "handle" $i=1
; 1 - левая файловая панель
; 2 - правая файловая панель
; 3 - активная файловая панель
; 4 - неактивная файловая панель
; 5 - заголовок левой панели (Имя Размер Тип)
; 6 - заголовок правой панели
; 7 - размер слева (строка состояния)
; 8 - размер справа (строка состояния)
; 9 - путь левой панели
; 10 - путь правой панели
; 11 - информация левой панели
; 12 - информация правой пан ели
; 13 - диски слева выбор в комбо [-E-]
; 14 - диски справа выбор в комбо
; 15 - левая панель (кнопки \ .. )
; 16 - правая панель
; 17 - нижняя панель функциональных кнопок (F3 F4 F5 ... )
; 18 - левое дерево
; 19 - правое дерево
; 20 - командная строка
; 21 - путь активной панели ControlGetText($TC_HWND,'',$0)
; 22 - in place edit ??? на месте редактирования по F2 (переименования)
; 23 - сепаратор
; 24 - кнопки дисков слева
; 25 - кнопки дисков справа
; 26 - табуляция слева
; 27 - табуляция справа
; 28 - панель инструментов $PATHBARAKTIV
; 29 - вертикальная панель инструментов $PATHBARAKTIVVV
;------------ "lresult" $i=0
; 1000 - возвращает 1- активная панель 2 - неактивная
; 1001/1002 - возвращает к-во объектов левой/правой панели
; 1003/1004 - возвращает к-во объектов левой/правой панели (в том числе скрытые быстрым фильтром)
; 1005/1006 - возвращает к-во выделенных объектов левой/правой панели
; 1007/1008 - возвращает номер пункта, на котором стоит курсор левой/правой панели
; 1009/1010 - возвращает 1 если есть переход в вверх (...) 0 - если нет левой/правой панели
; 1011/1012 - возвращает индекс 1-го файла, -1  - если нет файлов левой/правой панели
Func _Get_Handle_TC_El($n,$i=1)
  Return DllCall($hUser32Dll,$i ? 'handle' : 'lresult','SendMessage','hwnd',$TC_HWND,'uint',1074,'wparam',$n,'lparam',0)[0]
  ; $h=DllCall($hUser32Dll,$i ? 'handle' : 'lresult','SendMessage','hwnd',$TC_HWND,'uint',1074,'wparam',$n,'lparam',0)[0]
  ; Return $i ? $h : Number($h) 
EndFunc


Но нюансов в тотале море, когда в панели: ftp, результат поиска... и.т.д.

P.S. если вам интересно что-то автоматизировать в Total Commander, то в моей утилите TCIMG уже есть ряд команд, позволяющие делать различные преобразования, в частности копирование copys
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
Ох сколько кода... Надо разбираться, но мне скорее всего нужен будет второй вариант. А на утилиту посмотрю по свободе
Сообщение автоматически объединено:

Отлично срабатывает, но... в режиме просмотра эскизов результата не дает. Будем копать
 
Последнее редактирование:

Andrey_A

Продвинутый
Сообщения
319
Репутация
68
Отлично срабатывает, но... в режиме просмотра эскизов результата не дает. Будем копать
Я когда-то тоже пытался получить список при режиме "эскизы" - не получилось.
При переключении хендл вроде остаётся тот же , но элементы уже не стандартные и текст взять просто не получится.
Думаю надо смотреть в сторону UIAutomate.au3 и MSAccessibility.au3
В примере https://pastebin.com/aRjYgr4a под курсором текст возвращается, но если без курсора, получить к-во элементов, список текста, список выделенных элементов проблематично... - это наверно помогут только гуру Autoit - обращаюсь к ним, если нетрудно, помогите.

Задача: в Total Commander в режиме "эскизы" получить к-во элементов, массив текста всех элементов, массив текста выделенных элементов, просто хотелось бы понять принцип получения текст N-го пункта...

Кнопка переключения в TC
Код:
TOTALCMD#BAR#DATA
cm_SrcThumbs

Wcmicons.dll,0
Режим Эскизов вкл/выкл

0
269
 
Автор
E

eus_deus

Новичок
Сообщения
118
Репутация
0
странно, со склейкой выделенных изображений в режиме как раз таки эскизов ваша tcimg чего то справляется, - а вы говорите - не получилось
Хотя принцип наверное другой
 

Andrey_A

Продвинутый
Сообщения
319
Репутация
68
со склейкой выделенных изображений в режиме как раз таки эскизов ваша tcimg чего то справляется
Там передаётся параметр %L, %UL, %WL, что означает список выделенных объектов - это внутренние параметры TC - он формирует список в различной кодировке и передаёт временный файл в командную строку, но без него в режиме "эскизы" получить текст пока не получается
 
Верх