AIMP Forum
AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: Aleksanderis on April 22, 2009, 12:09:01
-
Пытаюсь добыть название текущего трека при помощи SDK функции IPC_GETPLAYLISTFILE. Код на С++ выглядит так:
char *name = (char*) SendMessage(plugin.hwndParent, WM_WA_IPC, id, IPC_GETPLAYLISTFILE);
Код как бы и работает, но есть проблема с Unicode строчками. Английские название передаются нормально, а вот всякие русские - всё в знаках вопроса ("? ? ? ? ? ? ?"). В случае с Winamp'ом всё прекрасно работает, всё передаётся нормально в Unicode'е.
В принципе этот пример взят из примеров SDK Winamp'а. Может для AIMP'а нужно использовать что-нибудь другое? Или в чём может быть загвоздка?
(Система Vista x64bit.)
-
вы используете сообщение IPC_GETPLAYLISTFILE или IPC_GETPLAYLISTFILEW?
-
Использую IPC_GETPLAYLISTFILE.
Про IPC_GETPLAYLISTFILEW не подумал как-то, но как понимаю это именно Unicode версия сообщения? Пробовал другие примеры с Unicode'ом, а этот вот как-то просмотрел, надо будет попробовать.
Но всё равно дело может быть не в этом, т.к. обычное IPC_GETPLAYLISTFILE сообщение с Winamp'ом работает на ура с разными языками. Или тут и есть отличие сообщений Winamp'а и AIMP'а?
-
в случае IPC_GETPLAYLISTFILE возвращается обычная, анси-строка. Проблема еще может быть в том, что локаль в ОС не русская - символы не правильно преобразуются перед передачей.
-
С IPC_GETPLAYLISTFILEW вроде разобрался - теперь название файлов берёт нормально. Но возникли проблемы в дальнейшем..
Во-первых, не работает IPC_GETPLAYLISTTITLEW. Возвращаются какие-то японско-китайские уникодные иероглифы. Различные, не одинаковые - в смысле, что-то всё-таки передаётся. Код такой:
WCHAR *name = (WCHAR*) SendMessage(plugin.hwndParent, WM_WA_IPC, idx, IPC_GETPLAYLISTTITLEW);
Во-вторых, не работает сообщение IPC_GET_EXTENDED_FILE_INFOW. Код такой:
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битную систему - эта проблема стала вновь актуальной.
-
Судя по-всему вопрос замят.. Но всё же хотелось бы более конкретный вердикт услышать - можно ли надеяться на какие-нибудь изменения по данной теме, или никаких изменений не намечается, и предложений тоже больше никаких нет?
SDK от Winamp'а не подходит на 100%, а С++ на столько не волоку, что бы SDK AIMP'а на С++ подогнать. На чистом С# плагины неособенно напишешь. Ну, а с Delphi незнаком вообще. Э-эх, вообщем труба. :-[
-
По поводу SDK на C++ - https://www.aimp.ru/forum/index.php?topic=14125.0
Может поможет
-
Судя по-всему, AIMP не поддерживает сообщения IPC_GET_EXTENDED_FILE_INFOW и IPC_GETPLAYLISTTITLEW, так выходит?
На память не скажу - не помню. Если не поддерживается - сделаю.
-
Судя по-всему вопрос замят..
Упустил из виду.
P.S. IPC_GET_EXTENDED_FILE_INFOW, IPC_GETPLAYLISTTITLEW, IPC_GET_BASFILE_INFOW будет работать в следующей 2.6 бетке.
-
Приятно слышать, будем ждать. :D
-
Немного к старой теме вернусь. Решил-таки к более божескому виду один плагин привести.
Вопрос такой: корректно ли работает сообщение IPC_GETPLAYLISTTITLE/IPC_GETPLAYLISTTITLEW?
Возвращается только Title трэка, а по идее должно возвращать то, что отображается в playlist'е. По крайнеи мере в Winamp'е это работает именно так (может не только из-за данного сообщения, а так - в сумме).
Возможно проблема только с 64bit'ами, т.к. вся эта тема из-за этого началась.
Может просто какие-нибудь настройки AIMP'а за это отвечают? Например, template'ы или ещё что-нить..