Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие с Winamp 
:(
    Опции темы
Scooter
Дата 13.10.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.10.2007

Репутация: нет
Всего: 1



Уважаемые програмисты помагите разрулить одну проблемку! Мне нужно после воспроизведения одного плайлиста в Winamp'e загрузить другой PlayList!

Код

//Добавление файла в PlayList
function WinAmp_AddPlayList(FileName: String): Boolean;
var
 v: Integer;
begin
 Result := False;
 WinAmp_AddFile(FileName);
 v := WinAmp_GetTracks(IPC_GETLISTLENGTH, 0);
 WinAmp_User(IPC_SETPLAYLISTPOS, v);
 WinAmp_Command(WINAMP_BUTTON2);
end;


Пользуюсь пока этой процедурой, но она добавляет по одной песне и все это происходит очень долго, один трек в секунду... А мне надо один готовый плайлист подменить другим не перезагружая и не закрывая винампа продолжить воспроизведение, как это сделать может кто знает? Заранее спасибо!

Модератор: у нас принято выделять код, для того чтобы его было легче читать. 

Вот тут можно ознакомиться с правилами выделения кода http://forum.vingrad.ru/index.php?show_typ...howtopic=126445


Это сообщение отредактировал(а) Alexeis - 13.10.2007, 21:21
PM MAIL   Вверх
Alix
Дата 13.10.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 1
Всего: 23



1. передавать winamp'у файлы, как это происходит через Explorer: 
"x:\path\to\winamp\winamp.exe" /ADD "%1"
2. передавать винампу сразу файл плейлиста
3. в функции WinAmp_Command использовать не SendMessage, а PostMessage



--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Scooter
Дата 13.10.2007, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.10.2007

Репутация: нет
Всего: 1



Мне бы примерный код увидеть как это сделать, а то я немного Ламер, если вас не затруднит   smile 
PM MAIL   Вверх
Scooter
Дата 13.10.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.10.2007

Репутация: нет
Всего: 1



Так вот мне и надо передать Винампу сразу файл PlayList'a... То есть загрузить винамп с нужным плайлистом мне не трудно, нужно только отредактировать файлик winamp.m3u... У меня проблемка в том чтобы во время воспроизведения старого плайлиста, как только закончит играть его последний трек, моментально загрузить новый плайлист и дальше продолжить воспроизведение уже нового плайлиста с первого трека...

Это сообщение отредактировал(а) Scooter - 14.10.2007, 07:13
PM MAIL   Вверх
Alix
Дата 14.10.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 1
Всего: 23



а можно вначале поинтересоваться, что за функция такая WinAmp_AddFile. Я не нашел модуля с такими функциями в инете, не выложите его сюда?


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 14.10.2007, 13:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Вот надыбал код из SDK 

Код

procedure NewPlayList(Path : AnsiString);
var
  cds       : TCopyDataStruct;
  WA_Handle : HWND;
  Buf       : Array[0..MAX_PATH-1] of Char;
const
  IPC_ENQUEUEFILE = 100;
  IPC_DELETE      = 101;
  WM_WA_IPC       = WM_USER;
  WINAMP_BUTTON2  = 40045;
begin
  WA_Handle := FindWindow('Winamp v1.x', nil); //Находим окно программы
  If WA_Handle = 0 then Exit;

  SendMessage(WA_Handle, WM_WA_IPC, 0, IPC_DELETE); //Удаляем старый плейлист
  cds.dwData:= IPC_ENQUEUEFILE;
  cds.lpData:= PChar(Path);
  cds.cbData:= System.Length(Path) + 1;
  SendMessage(WA_Handle, WM_COPYDATA, 0, Integer(@cds)); //Добавляем новый плейлист

  SendMessage(WA_Handle, WM_COMMAND, WINAMP_BUTTON2, 0); //Жемем на кнопку play
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  NewPlayList('C:\Documents and Settings\Админ\Рабочий стол\smpl_pl.m3u');
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alix
Дата 14.10.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 1
Всего: 23



Цитата

IPC_ENQUEUEFILE

черт, он был в самом начале *.h файла, я проглядел  smile 


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Gershkovich
Дата 5.11.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 8.2.2006

Репутация: нет
Всего: 2



А если путь в юникоде ?
Как быть ?

В wa_ipc.h  я нашел параметр IPC_ENQUEUEFILEW
т.е. как бы подразумевается юникод

Я переписал вышеупомянутую процедуру (ту што привел Alexeis)
таким образом, но почемуто не работает:

Код

procedure NewPlayList(Path : WideString);
 .......
begin
  .....
  .....
  cds.dwData:= IPC_ENQUEUEFILEW ; //  IPC_ENQUEUEFILEW = 1100
  cds.lpData:= PWideChar(Path);
  cds.cbData:= (System.Length(Path) * SizeOf(WideChar)) + 1; //считаем количество байт а не символов
  SendMessage(WA_Handle, WM_COPYDATA, 0, Integer(@cds)); //Добавляем новый плейлист
  .....
  .....
end;


Почему не работает ? Поддерживает ли WINAMP юникод-пути в принципе ?

ЗЫ А стоит ли вообще заморачиваццо с юникод-путями ?
Т.е. грубо говоря - будет ли процедура Alexeis-а работать скажем на немецкой винде ?
Китайской ?


Заранее спасибо.

PM MAIL   Вверх
Alexeis
Дата 5.11.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(Gershkovich @  5.11.2008,  11:17 Найти цитируемый пост)
Почему не работает ? Поддерживает ли WINAMP юникод-пути в принципе ?

  Гм.. насколько я помню юникод пути в API строятся несколько по другому. Там приклеивается что-то типа file://

Цитата(Gershkovich @  5.11.2008,  11:17 Найти цитируемый пост)
Т.е. грубо говоря - будет ли процедура Alexeis-а работать скажем на немецкой винде ?

  Если винда будет иметь соответствующие локали/шрифты и будет установлен правильный чарсет, то должно.

Цитата(Gershkovich @  5.11.2008,  11:17 Найти цитируемый пост)
Почему не работает ? Поддерживает ли WINAMP юникод-пути в принципе ?

  Раз параметр есть, то скорее всего да. Нужно попробовать.

Добавлено через 3 минуты и 1 секунду
А вот, нашел
Цитата

Maximum Path Length
In the Windows API, the maximum length for a path is MAX_PATH, which is defined as 260 characters. A path is structured in the following order: drive letter, colon, backslash, components separated by backslashes, and a null-terminating character, for example, the maximum path on the D drive is D:\<256 chars>NUL. 

The Unicode versions of several functions permit a maximum path length of approximately 32,000 characters composed of components up to 255 characters in length. To specify that kind of path, use the "\\?\" prefix. 

Note  The maximum path of 32,000 characters is approximate, because the "\\?\" prefix can be expanded to a longer string, and the expansion applies to the total length.

For example, "\\?\D:\<path>". To specify such a UNC path, use the "\\?\UNC\" prefix. For example, "\\?\UNC\<server>\<share>". These prefixes are not used as part of the path itself. They indicate that the path should be passed to the system with minimal modification, which means that you cannot use forward slashes to represent path separators, or a period to represent the current directory. Also, you cannot use the "\\?\" prefix with a relative path. Relative paths are limited to MAX_PATH characters.

When using the API to create a directory, the specified path cannot be so long that you cannot not append an 8.3 file name.

The shell and the file system may have different requirements. It is possible to create a path with the API that the shell UI cannot handle.





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Gershkovich
Дата 5.11.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 8.2.2006

Репутация: нет
Всего: 2



Да. Я это читал тоже.
не помогает.
Написал на форум winamp.com
ждем-с пока ответят
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.