Руководство по WM_COPYDATA

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Руководство по WM_COPYDATA

Сообщение Dec »

Существует ли в природе полное руководство по командам и параметрам, используемым в сообщении WM_COPYDATA при работе с TC?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

На англофоруме есть примеры для AHK.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
CaptainFlint
Сообщения: 6243
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Dec
Можно скачать полную историю версий, в ней несколько сжато, но в целом внятно описаны возможности Тотала при работе с этим сообщением.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Skif_off
Сообщения: 1257
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

CaptainFlint писал(а):Dec
Можно скачать полную историю версий
А где? На офсайте не нашёл, в HISTORY.TXT только 4е упоминания WM_COPYDATA.
Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Сообщение Dec »

CaptainFlint писал(а):Dec
Можно скачать полную историю версий.
Ссылку не подскажешь?
Аватара пользователя
CaptainFlint
Сообщения: 6243
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Почему же, ё-моё, ты нигде не пишешь "ё"?
Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Сообщение Dec »

Я нашел следующее:
25.11.11 Added: Send WM_COPYDATA with dwData='G'+256*'W': Same as with 'G'+256*'A', but data is returned as UTF-16 Unicode. dwData of return is 'R'+256*'W' (32/64)
25.11.11 Added: Send WM_COPYDATA with dwData='G'+256*'A' and lpData pointing to command to get back WM_COPYDATA with various info. Supported commands A: Active side (returns L or R), or two byte command: first byte: L=left, R=right, S=source, T=target. Second byte: P=current path, C=list count, I=caret index, N=name of file under caret. dwData of return is 'R'+256*'A' (32/64)

09.12.07 Added: Unicode support in WM_COPYDATA: prepend UTF8 byte order marker before each path containing Unicode characters (pure ANSI paths are passed as ANSI) -> /O switch now supports Unicode too

17.09.06 Added: Send WM_COPYDATA with dwData='E'+256*'M' and lpData pointing to em_xyz internal command (0-terminated) to execute that command. Accepts parameters separated by a space

12.04.06 Added: Support for environment variables in paths received via WM_COPYDATA from other programs
Т.е. по сути есть только 3 "команды": GW, GA и EM. Я правильно понимаю?
Аватара пользователя
CaptainFlint
Сообщения: 6243
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Dec
Странно, мне казалось, там все команды описаны. В общем, есть ещё CD для перехода в другой каталог на одной или обеих панелях. Строка lpData должна быть в следующем формате (пример для языка C/C++):
"c:\\test1\x0dc:\\test2\x00ST\x00"
Первый путь — левая панель, второй — правая; любой из них может быть опущен (но симмвол-разделитель \x0d должен оставаться). Флаги после первого нулевого символа опциональны. "S": трактовать пути как исходный/целевой; "T": открывать пути в новых вкладках.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher писал(а):На англофоруме есть примеры для AHK.
Там не только для AHK примеры. :wink:
Но топик является наиболее подробным обсуждением сообщений, посылаемых через WM_COPYDATA, есть примеры реализации на разных языках, в том числе для команды CD.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Там не только для AHK примеры. :wink:
Да я уже видел, не стал акцентировать. Dec не вчера "родился", чтобы самостоятельно оценить. :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1257
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

CD поддерживает юникод? Или только ANSI?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Поддерживает.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Skif_off,
Поддерживает UTF-8. Синтаксис можно посмотреть тут.
Skif_off
Сообщения: 1257
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

MVV
Смущает вот это
09.12.07 Added: Unicode support in WM_COPYDATA: prepend UTF8 byte order marker before each path containing Unicode characters (pure ANSI paths are passed as ANSI)
Маркер? Т.е. просто всегда дописывать \xEF\xBB\xBF перед каждым путём?
Если нет, например, пути для левой панели, тогда так

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

["\xEF\xBB\xBF"] "\x0D" ["\xEF\xBB\xBF"] ["<right_path>"] "\x00" ["S"] ["T"] "\x00"
?
В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?

Надо ещё разобраться с \x00: на AutoIt, кажется, не добавлял в конце, но работало.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Маркер? Т.е. просто всегда дописывать \xEF\xBB\xBF перед каждым путём?
Да. Перед левым и перед правым свои маркеры, указывающие, что конкретно этот путь в UTF-8. На схеме показаны оба, и оба необязательные.
Если нет, например, пути для левой панели, тогда так?
Если нет пути для какой-то панели, то и её маркер не нужен. Не знаю, что будет, если маркер будет, а пути не будет, хотя по логике он тогда должен игнорироваться, т.к. путь все равно пуст. Главное, чтобы в команде были символ конца строки и два нулевых байта.
В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?
Да, все элементы в квадратных скобках можно выкидывать, остальное писать надо.
Не забудь в поле размера данных учесть эти два нулевых байта, чтобы они корректно переслались тоталу.
Ответить