Страница 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. И можно делать так:

Код: Выделить всё

TCFS2 /ef "tem(`em_Cd c:\`)"
Или юзер-команда 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"`)

Код: Выделить всё

TCFS2 /ei test
Я не придумал пока, как красиво добавить возможность вставки кавычек через командную строку.

Ещё тотал не поддерживает юникод в сообщениях вызова юзер-команд.

[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
Одно знаю точно - если в именах папок или файлов есть эти самые обратные апострофы, будут проблемы.
Или их в свою очередь надо игнорировать внутри двойных кавычек, которые внутри косых? :lol:

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