Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Delphi | Написать плагин к винампу (http://forum.oszone.net/showthread.php?t=44437)

Interceptor 25-01-2005 21:30 292073

Delphi | Написать плагин к винампу
 
Может кто нибудь встречался с подобным делом.

Есть такая вот штука:

IPC_GETPLAYLISTFILE=211;
{(requires Winamp 2.04+, only usable from plug-ins (not external apps))
name:=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE);
IPC_GETPLAYLISTFILE gets the filename of the playlist entry [index].
returns a pointer to it. returns NULL on error}

Так как же мне получить имя этого файла в переменную типа String или PChar, когда функция SendMessage возвращает результат Integer (это наверное указатель на нуль терминальную строку)?

hasherfrog 25-01-2005 22:48 292095

Код:

#define IPC_GETPLAYLISTFILE 211
//  (requires Winamp 2.04+, only usable from plug-ins (not external apps))
// ** char *name=SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE);
// **
// ** IPC_GETPLAYLISTFILE gets the filename of the playlist entry [index].
// ** returns a pointer to it. returns NULL on error.

Вы на чём пишите?

Interceptor 28-01-2005 11:19 292956

Я пишу на Delphi.

Вообще то кажется можна сделать так:

Код:


Var
  name:PChar;
begin
  name:=PChar(SendMessage(hwnd_winamp,WM_WA_IPC,index,IPC_GETPLAYLISTFILE));
  Memo1.Lines.Append(name);
end;

НО, - тут я кое - что пропустил: эта процедурка оказывается пашет только в том случае, если моя програмка будет плагином к winamp.
А с написаниям плагинов - я еще не знаком. :(


Interceptor 28-01-2005 11:29 292960

Может обяснит кто-нибудь на пальцах: как написать плагин к Winamp на Delphi?

Хотя бы основные основные вещи проясните на эту туманную для меня вещь.

ЗЫ. На С у меня код (из winamp SDK) есть - но я в нем мало-что могу разобрать.

hasherfrog 28-01-2005 11:43 292965

Дык, конечно только для плагинов :) Во-первых, это там и написано, а во-вторых, передаётся же указатель на строку, строка хранится внутри контекста процесса, естественно, что только потоки внутри данного контекста смогут её прочитать :)

Interceptor 28-01-2005 11:55 292976

Ну а как насчет самого плугина? Какие минимальные требования с точки присутствия процедур?

hasherfrog 28-01-2005 12:26 292997

Если очень кратенько:
Плагин (к чему бы то ни было) - это по сути просто dll. Т.е. Вы пишите программу, которая компилится и линкуется дельфями как динамическая библиотека.
Наружу из длл "торчат" только несколько стандартизованных процедур, которые доступны пользователя. Чтобы их было видно, винамп (и любая другая прога) должна сама знать про них. Для этого используются всякие-разные "процедуры регистрации". В самой главной (dllmain) вы вызываете некую функцию регистрации и "прописываетесь" в процессе винампа.
Узнать о "главной" и спецификациях "видных для пользователя" можно из документации. Дальше только нужно действовать согласно указаниям. В Вашем случае придётся немного попыхтеть (совсем чуть-чуть) для перевода С-шных обявлений (что-нибудь типа __cdecl(dllexport)) в паскалевские. Это не сложно, уверен.

hasherfrog 15-02-2005 12:55 298497

А вот несколько иное решение :)
Управление винампом 5
http://www.cppfrance.com/code.aspx?ID=29460


Время: 00:14.

Время: 00:14.
© OSzone.net 2001-