[TC9] Сообщение WM_USER+50 с wparam
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Общие вопросы

#1:  Author: Skif_off PostPosted: Thu Jun 09, 2016 14:20
    —
В TC9.0b1 добавлено
Quote:
- Send WM_USER+50 with wparam=1..29 -> returns window handle of control. Controls are: 1=leftlist, 2=rightlist, 3=active list, 4=inactive list, 5=leftheader, 6=rightheader, 7=leftsize, 8=rightsize, 9=leftpath, 10=rightpath, 11=leftinfo, 12=rightinfo, 13=leftdrives, 14=rightdrives, 15=leftpanel, 16=rightpanel, 17=bottompanel, 18=lefttree, 19=righttree, 20=cmdline, 21=curdirpanel, 22=inplaceedit, 23=splitpanel, 24=leftdrivepanel, 25=rightdrivepanel, 26=lefttabs, 27=righttabs, 28=buttonbar, 29=buttonbarvertical64)
- Send WM_USER+50 with wparam set to 1000 to get active panel: 1=left, 2=right
- Send WM_USER+50 with wparam set to 1001/1002 to get number of items in left/right list
- Send WM_USER+50 with wparam set to 1003/1004 to get total number of items (including those hidden by quick filter
- Send WM_USER+50 with wparam set to 1005/1006 to get total number of selected items
- Send WM_USER+50 with wparam set to 1007/1008 to get index of current item (caret)
- Send WM_USER+50 with wparam set to 1011/1012 to get index of first file in list (-1 if there are no files)
- Send WM_USER+50 with wparam set to 1009/1010 to get index of first item (0 if there is no updir, 1 otherwise)
- Send WM_USER+50 with wparam set to 1011/1012 to get index of first file in list (-1 if there are no files)


Добавлено:
Тема на оффоруме


Last edited by Skif_off on Fri Jul 01, 2016 15:01; edited 1 time in total

#2:  Author: Skif_off PostPosted: Sun Jun 12, 2016 02:21
    —
К посту выше: не понял, почему Гислер пишет window handle of control, если возвращется ControlID, но работает всё. Расписывать на знакомых мне языках не буду, простейший вызов DllCall (SendMessage) возвращет массив с ControlID (или просто число с wparam=10хх), дескриптором главного окна ТС, значением wparam, 1075 (WM_USER+50 или WM_USER+51?) и что-то ещё (видимо, отсутствие ошибки - 0). Нужное - в первой ячейке массива ([0]), если элемент выключен, то в первой ячейке массива возвращает 0.

Добавлено спустя 11 минут:

P.S. А может и не всё: загнал всё в массив и в цикле слал х32-версии - поленился прогнать всё снова на х64.

P.P.S. Number of items включает в себя строку "..".

#3:  Author: Skif_off PostPosted: Fri Jul 01, 2016 15:32
    —
Отсюда:
Quote:
1. Наверно не WM_USER+50 а WM_USER+51
2. Мне выдаёт хендлы

1. Наверное, нет: у меня WM_USER+51 не срабатывет. WM_USER+51 для вызова внутренних команд в wParam, включая команды с параметрами в ТС9.
2. У меня выдаёт ID контролов (AutoIt 3.3.8.1, 3.3.12.0)
Quote:
а) Из первых 4-х 2 точно должны быть одинаковыми , т.к. левая, правая, активная, неактивная панели (оказывается 3 и 4 - это хендлы панелей инструментов)
б) 5 и 6 пусто, хотя заголовок физически есть
в) с 11 по 14 leftinfo... что это? это точно не хендл...
г) 28 и 29 пусто , хотя оба бара включены

а) Точно одинаковые и именно списки файлов/папок, никаких панелей инструментов.
б) Не пусто, но не понял, что это, и не удалось забрать текст из контрола (ControlGetText() возвращает пустую строку).
в) Размер и свободное место дисков над файловыми панелями, потом комбобоксы с дисками (Окно выбора дисков)
г) У меня работает в ТС обеих разрядностей.
 Мой скрипт для проверки

Собственно, кое-что уже использую.

#4:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Jul 01, 2016 19:55
    —
У меня вроде все пучком.
По мотивам сообщений с 10** нацарапал скрипт на PowerPro
 PanelInfo
Что касается сообщений с параметрами от 1 до 30, то скрипт еще проще:
 
Что конкретно не устраивает? Какой хендл/текст не удается получить?
Quote:
P.P.S. Number of items включает в себя строку ".."
У меня нет. Тестил на:
* Директориях с файлами и директориями (общий случай);
* То же, только с файлами;
* То же, только с директориями;
* Пустых директориях;
* Сетевом окружении.
Надо учитывать, что updir тоже считается за "элемент".
Quote:
5 и 6 пусто, хотя заголовок физически есть
Header - это загаловки колонок. Какой текст ты хочешь там увидеть? Возможно, ссылку на массив, где находятся тексты заголовков всех колонок. Даже если это так, я вижу в этом мало смысла. Ведь эти заголовки суть произвольный текст, введенный пользователем.
Вообще я бы предпочел программно получать текущий набор колонок и, главное - способ сортировки (номер колонки и маркер прямой/обратный).
Гислера можно понять. Всяческие скрипто- и утилитописцы (я в том числе) давно просили у него расширения способов программного управления Тоталом. Он сказал: "Вам хочется хендлов? Их есть у меня", и вывалил список параметров сообщений. Знаешь, что это - пользуйся, не знаешь - не обращай внимания.
Например, коды 11 и 12 позволяют узнать свободное место на текущих дисках. Кому-то, глядишь, и пригодится.

#5:  Author: Skif_off PostPosted: Sat Jul 02, 2016 01:28
    —
Вахмурка wrote:
У меня нет. Тестил на:
...
Надо учитывать, что updir тоже считается за "элемент".

Так "нет" или "считается"? Smile Например, в папке три каталога - ТС показывает 4 элемента, у меня везде, где есть "..", number на единицу больше реального количества папок/файлов (сетевое окружение не проверял).

#6:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Jul 02, 2016 01:33
    —
Я тебя не понял. Я думал, что число элементов выдается как "..2", например. Ты использовал нестандартную терминологию. Не нравится updir, скажи "вход в директорию" или, согласно переводу Власова-Казакова: "элемент [..]"

#7:  Author: Skif_off PostPosted: Sat Jul 02, 2016 13:33
    —
Вахмурка
Число - оно и есть число, откуда там точки в начале?
Прошу прощения, с LB_GETTEXT возился в подробном виде, проверка была попутной - вот и ляпнул "строка" вместо "элемент". И у меня почему-то первая бета запустилась без квадратных скобок в именах каталогов (в wincmd.ini только UseIniInProgramDir=7), поэтому написал "..", а не "[..]", что было бы понятнее, наверное.

#8:  Author: LonerDLocation: Донецк PostPosted: Thu Jul 28, 2016 01:37
    —
; 08.06.16 Added: Send WM_USER+50 with wparam set to 1003/1004 to get total number of items (including those hidden by quick filter (32/64)
; 08.06.16 Added: Send WM_USER+50 with wparam set to 1001/1002 to get number of items in left/right list (32/64)

А в чём разница?
Посылаю 1002 и 1004 - в обоих случаях получаю одинаковый ответ.
Активирую Ignore List и добавляю туда несколько файлов. Опять посылаю 1002 и 1004 - получаю одинаковый ответ (в обоих случаях скрытые файлы не учитываются).

#9:  Author: FlasherLocation: Москва PostPosted: Thu Jul 28, 2016 01:54
    —
По описанию первый случай и должен отличаться от второго только в случае сокращения списка при быстрой фильтрации.

#10:  Author: LonerDLocation: Донецк PostPosted: Thu Jul 28, 2016 02:13
    —
Flasher wrote:
По описанию первый случай и должен отличаться от второго только в случае сокращения списка при быстрой фильтрации.

Всё, понял.
Сразу не сообразил, что за фильтрация имелась в виду.

Тут ещё вроде баг нарисовался с 1011/1012. Судя по описанию, должно возвращать -1 в случае отсутствия файлов в панели. У меня другой результат получается (на чистом Тотале). Проверьте, отпишитесь:
http://www.ghisler.ch/board/viewtopic.php?t=45068

#11:  Author: Skif_off PostPosted: Thu Jul 28, 2016 16:16
    —
LonerD
Win7x64, на AutoIt пробовал так:
 Hidden text

(AutoIt3.exe)
Возвразщает "4294967295" только при сочетании AutoItx64 + TCx86.


Last edited by Skif_off on Tue Aug 02, 2016 05:33; edited 1 time in total

#12:  Author: LonerDLocation: Донецк PostPosted: Thu Jul 28, 2016 21:44
    —
Да, точно. Я ж не написал как получаю этот результат. Добавил в багрепорт.
AutoHotkey последней версии 32х битный (только такой всегда использую) и обе версии Тотала х32 и х64.
Скрипт самый простейший
Code:
#NoEnv
#NoTrayIcon
  SendMessage, 1074, 1011, 0, , ahk_class TTOTAL_CMD
  MsgBox, % ErrorLevel
ExitApp

#13:  Author: Skif_off PostPosted: Tue Aug 02, 2016 06:08
    —
LonerD
Не понял, признано баг-репортом или нет? Посмотрел ещё раз про ErrorLevel, похоже, не баг и вам (автору скрипта) самому нужно пересчитывать?

Похоже, тип возвращаемого параметра должен быть "int", а не "lresult"?

#14:  Author: LonerDLocation: Донецк PostPosted: Tue Aug 02, 2016 14:20
    —
Я тоже не понял. Вроде как сошлись на том, что не баг.
Почему у меня при первых попытках получалось 75 в конце числа вместо 95 - не знаю (я человек невнимательный, но помню, что тогда очень старательно выписывал результат, стараясь не ошибиться).

#15:  Author: Skif_off PostPosted: Tue Aug 02, 2016 23:53
    —
LonerD wrote:
очень старательно выписывал результат, стараясь не ошибиться

А буфер обмена на что? Smile

Наверное, можно проверять значение и при получении 4294967295 - использовать 1003/1004 для проверки (не хочется менять канонiчную функцию в AutoIt).



Total Commander -> Общие вопросы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group