Руководство по WM_COPYDATA
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Руководство по WM_COPYDATA Author: Dec PostPosted: Mon Nov 03, 2014 13:30
    —
Существует ли в природе полное руководство по командам и параметрам, используемым в сообщении WM_COPYDATA при работе с TC?

#2:  Author: FlasherLocation: Москва PostPosted: Mon Nov 03, 2014 13:43
    —
На англофоруме есть примеры для AHK.

#3:  Author: CaptainFlintLocation: Москва PostPosted: Mon Nov 03, 2014 14:30
    —
Dec
Можно скачать полную историю версий, в ней несколько сжато, но в целом внятно описаны возможности Тотала при работе с этим сообщением.

#4:  Author: Skif_off PostPosted: Mon Nov 03, 2014 15:04
    —
CaptainFlint wrote:
Dec
Можно скачать полную историю версий

А где? На офсайте не нашёл, в HISTORY.TXT только 4е упоминания WM_COPYDATA.

#5:  Author: Dec PostPosted: Mon Nov 03, 2014 15:13
    —
CaptainFlint wrote:
Dec
Можно скачать полную историю версий.

Ссылку не подскажешь?

#6:  Author: CaptainFlintLocation: Москва PostPosted: Mon Nov 03, 2014 15:33
    —
http://wincmd.ru/plugring/FullTCHistory.html

#7:  Author: Dec PostPosted: Mon Nov 03, 2014 15:44
    —
Я нашел следующее:

Quote:
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. Я правильно понимаю?

#8:  Author: CaptainFlintLocation: Москва PostPosted: Mon Nov 03, 2014 17:25
    —
Dec
Странно, мне казалось, там все команды описаны. В общем, есть ещё CD для перехода в другой каталог на одной или обеих панелях. Строка lpData должна быть в следующем формате (пример для языка C/C++):
Quote:
"c:\\test1\x0dc:\\test2\x00ST\x00"

Первый путь — левая панель, второй — правая; любой из них может быть опущен (но симмвол-разделитель \x0d должен оставаться). Флаги после первого нулевого символа опциональны. "S": трактовать пути как исходный/целевой; "T": открывать пути в новых вкладках.

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Nov 04, 2014 17:01
    —
Flasher wrote:
На англофоруме есть примеры для AHK.

Там не только для AHK примеры. Wink
Но топик является наиболее подробным обсуждением сообщений, посылаемых через WM_COPYDATA, есть примеры реализации на разных языках, в том числе для команды CD.

#10:  Author: FlasherLocation: Москва PostPosted: Tue Nov 04, 2014 17:10
    —
MVV wrote:
Там не только для AHK примеры. Wink
Да я уже видел, не стал акцентировать. Dec не вчера "родился", чтобы самостоятельно оценить. Wink

#11:  Author: Skif_off PostPosted: Tue Dec 02, 2014 20:20
    —
CD поддерживает юникод? Или только ANSI?

#12:  Author: FlasherLocation: Москва PostPosted: Tue Dec 02, 2014 20:26
    —
Поддерживает.

#13:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Dec 02, 2014 20:42
    —
Skif_off,
Поддерживает UTF-8. Синтаксис можно посмотреть тут.

#14:  Author: Skif_off PostPosted: Tue Dec 02, 2014 21:10
    —
MVV
Смущает вот это
Quote:
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 перед каждым путём?
Если нет, например, пути для левой панели, тогда так
Code:
["\xEF\xBB\xBF"] "\x0D" ["\xEF\xBB\xBF"] ["<right_path>"] "\x00" ["S"] ["T"] "\x00"

?
В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?

Надо ещё разобраться с \x00: на AutoIt, кажется, не добавлял в конце, но работало.

#15:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Dec 02, 2014 22:11
    —
Quote:
Маркер? Т.е. просто всегда дописывать \xEF\xBB\xBF перед каждым путём?

Да. Перед левым и перед правым свои маркеры, указывающие, что конкретно этот путь в UTF-8. На схеме показаны оба, и оба необязательные.
Quote:
Если нет, например, пути для левой панели, тогда так?

Если нет пути для какой-то панели, то и её маркер не нужен. Не знаю, что будет, если маркер будет, а пути не будет, хотя по логике он тогда должен игнорироваться, т.к. путь все равно пуст. Главное, чтобы в команде были символ конца строки и два нулевых байта.
Quote:
В случае отсутствия флагов S/T, команда должна заканчиваться двумя \x00?

Да, все элементы в квадратных скобках можно выкидывать, остальное писать надо.
Не забудь в поле размера данных учесть эти два нулевых байта, чтобы они корректно переслались тоталу.



Total Commander -> Автоматизация Total Commander


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

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

Powered by phpBB © 2001, 2005 phpBB Group