AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: Aleksanderis on April 22, 2009, 12:09:01

Title: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Aleksanderis on April 22, 2009, 12:09:01
Пытаюсь добыть название текущего трека при помощи SDK функции IPC_GETPLAYLISTFILE. Код на С++ выглядит так:

Code: [Select]
char *name = (char*) SendMessage(plugin.hwndParent, WM_WA_IPC, id, IPC_GETPLAYLISTFILE);
Код как бы и работает, но есть проблема с Unicode строчками. Английские название передаются нормально, а вот всякие русские - всё в знаках вопроса ("? ? ? ? ? ? ?"). В случае с Winamp'ом всё прекрасно работает, всё передаётся нормально в Unicode'е.

В принципе этот пример взят из примеров SDK Winamp'а. Может для AIMP'а нужно использовать что-нибудь другое? Или в чём может быть загвоздка?


(Система Vista x64bit.)
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Artem on April 22, 2009, 21:49:10
вы используете сообщение IPC_GETPLAYLISTFILE или IPC_GETPLAYLISTFILEW?
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Aleksanderis on April 22, 2009, 23:01:24
Использую IPC_GETPLAYLISTFILE.
Про IPC_GETPLAYLISTFILEW не подумал как-то, но как понимаю это именно Unicode версия сообщения? Пробовал другие примеры с Unicode'ом, а этот вот как-то просмотрел, надо будет попробовать.

Но всё равно дело может быть не в этом, т.к. обычное IPC_GETPLAYLISTFILE сообщение с Winamp'ом работает на ура с разными языками. Или тут и есть отличие сообщений Winamp'а и AIMP'а?
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Artem on April 22, 2009, 23:35:57
в случае IPC_GETPLAYLISTFILE возвращается обычная, анси-строка. Проблема еще может быть в том, что локаль в ОС не русская - символы не правильно преобразуются перед передачей.
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Aleksanderis on April 23, 2009, 11:01:46
С IPC_GETPLAYLISTFILEW вроде разобрался - теперь название файлов берёт нормально. Но возникли проблемы в дальнейшем..
Во-первых, не работает IPC_GETPLAYLISTTITLEW. Возвращаются какие-то японско-китайские уникодные иероглифы. Различные, не одинаковые - в смысле, что-то всё-таки передаётся. Код такой:

Code: [Select]
WCHAR *name = (WCHAR*) SendMessage(plugin.hwndParent, WM_WA_IPC, idx, IPC_GETPLAYLISTTITLEW);

Во-вторых, не работает сообщение IPC_GET_EXTENDED_FILE_INFOW. Код такой:

Code: [Select]
int idx = SendMessage(plugin.hwndParent, WM_WA_IPC, 0, IPC_GETLISTPOS);
WCHAR *name = (WCHAR*) SendMessage(plugin.hwndParent, WM_WA_IPC, idx, IPC_GETPLAYLISTFILEW);

WCHAR value[512];
extendedFileInfoStructW dt;
dt.filename = name;
dt.metadata = metadata;
dt.ret = value;
dt.retlen = 512;

SendMessage(plugin.hwndParent, WM_WA_IPC, (WPARAM) &dt, IPC_GET_EXTENDED_FILE_INFOW);

Перемененная name - нормальная уникодная строка, указывающая на файл (IPC_GETPLAYLISTFILEW работает нормально). В результате сообщение IPC_GET_EXTENDED_FILE_INFOW не проходит. Судя по-всему, AIMP не поддерживает сообщения IPC_GET_EXTENDED_FILE_INFOW и IPC_GETPLAYLISTTITLEW, так выходит?
   
Б случае с Winamp'ом, опять же, работает всё прекрасно.   


Насчёт локали для non-Unicode приложенний - она-то русская, но тут судя по-всему старая проблема. Локаль русская, но региональные настройки не русские. Если сделать региональные настройки русские, то не надо ничего и со всякими IPC_GETPLAYLISTFILEW шаманить - всё работает прекрасно. Об этой проблеме я писал раньше (https://www.aimp.ru/forum/index.php?topic=8768 (https://www.aimp.ru/forum/index.php?topic=8768)), и вроде она решилась после обновления версии, но после перехода на 64битную систему - эта проблема стала вновь актуальной.
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Aleksanderis on May 04, 2009, 16:48:11
Судя по-всему вопрос замят.. Но всё же хотелось бы более конкретный вердикт услышать - можно ли надеяться на какие-нибудь изменения по данной теме, или никаких изменений не намечается, и предложений тоже больше никаких нет?

SDK от Winamp'а не подходит на 100%, а С++ на столько не волоку, что бы SDK AIMP'а на С++ подогнать. На чистом С# плагины неособенно напишешь. Ну, а с Delphi незнаком вообще. Э-эх, вообщем труба. :-[
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: sviperz on May 04, 2009, 19:52:14
По поводу SDK на C++ - https://www.aimp.ru/forum/index.php?topic=14125.0
Может поможет
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Artem on May 04, 2009, 20:50:52
Судя по-всему, AIMP не поддерживает сообщения IPC_GET_EXTENDED_FILE_INFOW и IPC_GETPLAYLISTTITLEW, так выходит?

На память не скажу - не помню. Если не поддерживается - сделаю.
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Artem on May 04, 2009, 21:07:18
Судя по-всему вопрос замят..

Упустил из виду.

P.S. IPC_GET_EXTENDED_FILE_INFOW, IPC_GETPLAYLISTTITLEW, IPC_GET_BASFILE_INFOW будет работать в следующей 2.6 бетке.
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Aleksanderis on May 05, 2009, 00:28:29
Приятно слышать, будем ждать.   :D
Title: Re: Информация о треке (IPC_GETPLAYLISTFILE и Unicode)
Post by: Aleksanderis on October 20, 2009, 09:49:38
Немного к старой теме вернусь. Решил-таки к более божескому виду один плагин привести.

Вопрос такой: корректно ли работает сообщение IPC_GETPLAYLISTTITLE/IPC_GETPLAYLISTTITLEW?
Возвращается только Title трэка, а по идее должно возвращать то, что отображается в playlist'е. По крайнеи мере в Winamp'е это работает именно так (может не только из-за данного сообщения, а так - в сумме).

Возможно проблема только с 64bit'ами, т.к. вся эта тема из-за этого началась.

Может просто какие-нибудь настройки AIMP'а за это отвечают? Например, template'ы или ещё что-нить..