Страница 77 из 130
Добавлено: Пн дек 30, 2013 09:39
rust
Этими вашими автохоткеями можно решить вопрос: по нажатию Вниз посылаешь панели сообщение LB_GETCOUNT (wParam=lParam=0), затем LB_GETCARETINDEX (wParam=lParam=0), и если ...
MVV, а нельзя это сделать с помощью TCFS2? "sendmsg(findwnd(`TTotal_cmd`), LB_GETXXX, 0, 0, 1)" похоже всегда возвращает либо 1, либо 0, причем без разницы отправляешь окну TTotal_cmd или TMyListbox.
Добавлено: Пн дек 30, 2013 12:52
MVV
Сообщения необходимо посылать именно панелям, т.к. они являются представителями класса окон-списков и реагируют на эти сообщения, возвращая информацию о себе. А из TCFS2 получить дескрипторы окон панелей не получится.
Говоря об "автохоткеях", я подразумевал именно перехват нажатий клавиш с соответствующей обработкой, TCSF2 этим не занимается.
Я пробовал отправлять панелям указанные сообщения (из InqSoft Window Scanner), возвращаемые значения соответствуют действительности.
Добавлено: Пн дек 30, 2013 15:01
rust
А вот если через TCFS2 отправить сообщение на TTotal_cmd, равно как напрямую на $10320 (в данную минуту это TMyListbox), то TMyListbox возвращает корректное значение например lb_getcaretindex, но либо до TCFS2 оно не доходит, либо TCFS2 интерпретирует по-своему, либо до меня чего-то не доходит.
Добавлено: Пн дек 30, 2013 21:38
MVV
Имею левую панель с дескриптором окна
$20462.
Выполняю в командной строке:
Код: Выделить всё
tcfs2 /ef "set_tcini(tcfs2, lpos, sendmsg($20462, $19f))"
И в параметр
lpos секции
tcfs2 файла
wincmd.ini записывается правильное значение текущей позиции (
$19f - это
LB_GETCARETINDEX).
Выполняю:
Код: Выделить всё
tcfs2 /ef "sendmsg($20462, $19e, sendmsg($20462, $19f)-1, 0)"
И курсор сдвигается на 1 элемент вверх (
$19e - это
LB_SETCARETINDEX).
Добавлено: Вт дек 31, 2013 07:41
rust
дошло, я вешаю на кнопку "sendmsg(findwnd(`TTotal_cmd`), $19f)" и вижу в окне spy++ текущую позицию GetCaretIndex, затем вешаю на ту же кнопку cmd.exe и вижу то же самое, оказывается не я один хочу получить позицию курсора
Хотел красиво решить проблему потери индекса файла в панели ТС после multirename, если курсор находится среди выделенных файлов, не знаю сделает-ли это Гислер. Сейчас тупо повесил на ctrl+down
Код: Выделить всё
param=/ef "msg($0B, 0, 0) send(`{end}`) tcm(2054,1) send(`^(){down}`) msg($0B, 1, 0) tcm(2918)"
позиционирует курсор на первом файле после выделенных, на нем и остается курсор после MRT.
{end} ушли в конец списка
2054 - cm_GotoPrevSelected попали на последний выделенный
^() перед {down} - как бы "ловушка" для ctrl, чтобы срабатывал down, а не циклился ctrl+down
Добавлено: Сб янв 18, 2014 13:10
Flasher
MVV
А ты можешь сделать, чтобы в tem запускались команды с параметрами, где задействован %A?
Добавлено: Сб янв 18, 2014 18:50
MVV
Они же и так запускаются. Или я чего-то не знаю? Для команды в
tem можно указать параметры, и они будут подставлены тоталом вместо
%A...
Например, юзер-команда
em_Cd с командой
cd и параметром
%A. И можно делать так:
Или юзер-команда
em_Exec с командой
Exec.exe (из Virtual Panel) и параметром
%A, и можно из TCFS2 запускать любые программы:
Код: Выделить всё
TCFS2 /ef "tem(`em_Exec notepad.exe d:\1.txt`)"
Аналогичным образом можно написать юзер-команды для смены набора колонок, загрузки шаблона синхронизации и т.п.
Добавлено: Сб янв 18, 2014 19:07
Flasher
А если вместо notepad.exe указать полный путь до проги с пробелами в пути?
[cut]Кстати, а в чём прикол, что у тебя Exec занял ровно 1 Кб?[/cut]
Добавлено: Сб янв 18, 2014 19:44
MVV
Там проблема с кавычками. Чтобы указывать полный путь с пробелами, надо этот путь в кавычки заключать. Но тогда это будет работать только из TCFS2.ini:
Код: Выделить всё
test=tem(`em_Exec "C:\Program Files (x86)\7-Zip\7zFM.exe" "F:\My Archive.7z"`)
Я не придумал пока, как красиво добавить возможность вставки кавычек через командную строку.
Ещё тотал не поддерживает юникод в сообщениях вызова юзер-команд.
[cut]Да нет там прикола, всё нормально, минимум кода, точка входа переопределена, чтобы не включать CRT в файл, и секции кода и данных объединены.

Когда секция всего одна, на заголовок хватает 512 байт, и секция уложилась в 512. В 64-битном варианте есть ещё неотключаемая секция, поэтому заголовок 1024 байта плюс две секции.[/cut]
Добавлено: Сб янв 18, 2014 20:09
Flasher
MVV писал(а):Но тогда это будет работать только из TCFS2.ini
Подобного как раз и требуется избежать, чтобы не плодить лишнего в конфигах (таких команд будет много). Хотя бы для начала без параметра к проге (аля notepad).
Отсутствие Юникода в данном случае совершенно не пугает.
[cut]Заголовок 512 + секция 512. Хм. Занятно.[/cut]
Добавлено: Сб янв 18, 2014 21:38
sa
MVV писал(а):добавить возможность вставки кавычек через командную строку.
А нет возможности различать назначение кавычек в зависимости от того, содержатся ли они внутри косых кавычек или нет?
Добавлено: Вс янв 19, 2014 01:44
MVV
Да всё
возможно, но не знаю, насколько это правильно игнорировать двойные кавычки внутри косых.
Добавлено: Вс янв 19, 2014 07:00
Flasher
MVV
Да нормально, пока подводных камней не вижу. Всё гуд. Спасибо.
Добавлено: Вс янв 19, 2014 11:53
MVV
Одно знаю точно - если в именах папок или файлов есть эти самые обратные апострофы, будут проблемы.
Или их в свою очередь надо игнорировать внутри двойных кавычек, которые внутри косых?

Добавлено: Вс янв 19, 2014 13:25
Flasher
Можно, конечно. Но не то чтобы очень нужно.
