Руководство по WM_COPYDATA
Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view
Руководство по WM_COPYDATA
Существует ли в природе полное руководство по командам и параметрам, используемым в сообщении WM_COPYDATA при работе с TC?
На англофоруме есть примеры для AHK.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
- CaptainFlint
- Сообщения: 6243
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
- CaptainFlint
- Сообщения: 6243
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Я нашел следующее:
Т.е. по сути есть только 3 "команды": GW, GA и EM. Я правильно понимаю?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
- CaptainFlint
- Сообщения: 6243
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Dec
Странно, мне казалось, там все команды описаны. В общем, есть ещё CD для перехода в другой каталог на одной или обеих панелях. Строка lpData должна быть в следующем формате (пример для языка C/C++):
Странно, мне казалось, там все команды описаны. В общем, есть ещё CD для перехода в другой каталог на одной или обеих панелях. Строка lpData должна быть в следующем формате (пример для языка C/C++):
Первый путь — левая панель, второй — правая; любой из них может быть опущен (но симмвол-разделитель \x0d должен оставаться). Флаги после первого нулевого символа опциональны. "S": трактовать пути как исходный/целевой; "T": открывать пути в новых вкладках."c:\\test1\x0dc:\\test2\x00ST\x00"
Почему же, ё-моё, ты нигде не пишешь "ё"?
Там не только для AHK примеры.Flasher писал(а):На англофоруме есть примеры для AHK.
Но топик является наиболее подробным обсуждением сообщений, посылаемых через WM_COPYDATA, есть примеры реализации на разных языках, в том числе для команды CD.
Да я уже видел, не стал акцентировать. Dec не вчера "родился", чтобы самостоятельно оценить.MVV писал(а):Там не только для AHK примеры.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off,
Поддерживает UTF-8. Синтаксис можно посмотреть тут.
Поддерживает UTF-8. Синтаксис можно посмотреть тут.
MVV
Смущает вот это
Если нет, например, пути для левой панели, тогда так
?
В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?
Надо ещё разобраться с \x00: на AutoIt, кажется, не добавлял в конце, но работало.
Смущает вот это
Маркер? Т.е. просто всегда дописывать \xEF\xBB\xBF перед каждым путём?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"] "\x0D" ["\xEF\xBB\xBF"] ["<right_path>"] "\x00" ["S"] ["T"] "\x00"В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?
Надо ещё разобраться с \x00: на AutoIt, кажется, не добавлял в конце, но работало.
Да. Перед левым и перед правым свои маркеры, указывающие, что конкретно этот путь в UTF-8. На схеме показаны оба, и оба необязательные.Маркер? Т.е. просто всегда дописывать \xEF\xBB\xBF перед каждым путём?
Если нет пути для какой-то панели, то и её маркер не нужен. Не знаю, что будет, если маркер будет, а пути не будет, хотя по логике он тогда должен игнорироваться, т.к. путь все равно пуст. Главное, чтобы в команде были символ конца строки и два нулевых байта.Если нет, например, пути для левой панели, тогда так?
Да, все элементы в квадратных скобках можно выкидывать, остальное писать надо.В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?
Не забудь в поле размера данных учесть эти два нулевых байта, чтобы они корректно переслались тоталу.