Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Дружит ли Дельфи с Винампом?

Автор: Бананафт 18.10.2003 15:35

Как из Delphi-приложения можно управлять Winamp-ом?
Например, при нажатии кнопки запускется и начинает играть.

У меня где-то валяется mp-3 диск с автораном написанном на Delphi.

Автор: trminator 19.10.2003 18:32

procedure TUsrForm.PrevBtnClick(Sender: TObject);
var h : hWnd;
begin
  h:=findwindow('Winamp v1.x',nil);
  sendmessage(h,WM_COMMAND,40044,0); //Prev track
end;
procedure TUsrForm.PauseBtnClick(Sender: TObject);
var h : hWnd;
begin
  h:=findwindow('Winamp v1.x',nil);
  sendmessage(h,WM_COMMAND,40046,0); // Pauseunpause
end;

procedure TUsrForm.NextBtnClick(Sender: TObject);
var h : hWnd;
begin
  h:=findwindow('Winamp v1.x',nil);
  sendmessage(h,WM_COMMAND,40048,0); //Next track
end;

Еще таких команд можно найти в инете, где-то на сайте Нуллсофта, вроде... правда, там примеры под С++, но оно неважно...

Запускать можно так:
WinExec(PChar(WinAMPPath+' "'+PathToPls+'"'),1);

,где WinAmpPath - путь к ВинАмпу, PathToPls - путь к плейлисту. Запустится и загрузит этот плейлист.

Автор: Vit 20.10.2003 23:52

http://jvcl.sourceforge.net - там есть библиотека jvcl - содержит в том числе и набор компонентов по управлению winAMP

Автор: Бананафт 21.10.2003 18:50

Terminator, огромное спасибо тебе, большому железному товарищю!
Всё фурычит как надо.

Автор: CJ 14.01.2004 23:20

;D Конечно!

Приветствую Вас, Кирилл!

program WAHotKeys;
uses Windows, Messages;
ResourceString RC_Winamp = 'Winamp v1.x';
ResourceString RC_Winamp3 = 'BaseWindow_RootWnd';

const
Num = 13;
Spec = Num - 10;
keys: array[1..Num] of byte = (byte('X'), byte('V'), byte('C'), byte('B'),
byte('Z'), byte('L'), VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN,
byte('Q'), byte('S'), byte('N'));
var
msg: TMsg;
id: array[1..Num] of integer;
st: string;
WA3, handle: THandle;
i, key: integer;
begin
handle:= GetModuleHandle('WAHotKeys');
st:= 'hk ';
for i:= 1 to Num do
begin
st[3]:= char(64+i);
id[i]:= GlobalAddAtom(PAnsiChar(st));
RegisterHotKey(handle, id[i], MOD_WIN, keys[i]);
end;
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
WA3:= findwindow(PAnsiChar(RC_Winamp3), nil); // WinAmp3 window
if WA3=0 then WA3:=findwindow(PAnsiChar(RC_Winamp), nil); // WinAmp window
if (WA30) then
begin
if ((msg.LParam shl 16) shr 16)=MOD_WIN then
begin // MOD_WIN
key:= (msg.LParam shr 16);
if key=byte('S') then
begin
if IsWindowVisible(WA3) then ShowWindow(WA3, sw_minimize)
else ShowWindow(WA3, sw_restore);
end else
if key=byte('N') then
begin
postmessage(WA3, wm_keydown, byte('B'), 0);
postmessage(WA3, wm_keyup, byte('B'), 0);
end else
if key=byte('Q') then
begin // UnRegisterHotKeys
for i:= 1 to Num do UnRegisterHotKey(handle, id[i]);
Halt(Msg.wParam);
end else
begin
for i:= 1 to (Num-Spec) do
begin // for i
if key=keys[i] then
begin
postmessage(WA3, wm_keydown, keys[i], 0);
postmessage(WA3, wm_keyup, keys[i], 0);
end;
end; // for i
end;
end; // MOD_WIN
end;
DispatchMessage(Msg);
end;
Halt(Msg.wParam);
end.

эта прграмма позволяет управлять винампом. измените код. надеюсь у вас получится