Merhaba arkadaşlar konu başlığını doğru belirtebildimmi bilmiyorum. Cevap için herkeze şimdiden teşekkür ederim.
Delphi ile winamp üzerinde şöyle bir işlem yapabilirmiyiz; Delphide dizinini belirttiğim bir dosyayı winamp'ın şarkı listesine ekleyebilirmiyim. Örneğin bir şakı dosyasına sağ click yaptığımızda bilgisayarımızda winamp yüklüyse bunu winamp listesine ekleme gibi şeçenekler var. Api'lerle olabilir ama birşey bulamadım araştırmalarımda ayrıca araştırmalarım esnasında bunu mirc gibi basit bir platformda gerçekleştirdiklerini gördüm. Mirc gibi bir 3'üncü ara yüz programlama dilinde bu gerçekleştiriliyorsa delphidede mümkündür sanırım, bunu ben delphide nasıl yapabilirim.
Winamp & Delphi ilişkilendirme ?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Winamp & Delphi ilişkilendirme ?
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Re: Winamp & Delphi ilişkilendirme ?
Kendim denemedim, sadece google amcaya, 'winamp delphi api' yazdım... Aşağıdaki uniti proje ekle dene bakalım sorununa çare olacakmı...
Ben şöyle yüzeysel baktım biraz kurcalanırsa sorunun yanıtı unitin içende var...
Ben şöyle yüzeysel baktım biraz kurcalanırsa sorunun yanıtı unitin içende var...
Kod: Tümünü seç
unit WinampApi;
interface
uses Windows,Messages,Classes,SysUtils;
type
TWinampApi = class
private
WinampHnd : THandle;
function ConvertTime(n: integer;m : integer): string;
function ConvertTimeTool(n: integer): string;
function split(seperator: Char; text: String; var list: TStringList): Integer;
public
WinampPath : String;
SongLengthParseTime : Boolean;
SongPosParseTime : Boolean;
constructor Create(WPath : String);
function getWhatsPlaying():String;
function getSongState():String;
function getSongPosition():String;
function getSongLength():String;
function getSongSampleRate():String;
function getSongBitRate():String;
function getSongChannels():String;
function getPlayListPosition():String;
function getPlayListLength():String;
procedure getPlayList(var PlayList:TStringList;var FileList:TStringList);
procedure PlaySong(Mp3Name:string);
procedure AddToPlayList(Mp3Name:string);
procedure Play();
procedure Stop();
procedure Pause();
procedure NextTrack();
procedure PreviousTrack();
procedure Forward5Seconds();
procedure Back5Seconds();
procedure StartOfPlayList();
procedure VolumeUp();
procedure VolumeDown();
procedure FadeOutStop();
end;
implementation
{ ----- PUBLIC VOID/NULL RETURN METHODS ---- }
constructor TWinampApi.Create(WPath : String);
begin
SongLengthParseTime := False;
SongPosParseTime := False;
WinampPath := WPath;
WinampHnd := FindWindow(\'Winamp v1.x\', nil);
end;
procedure TWinampApi.PlaySong(Mp3Name:String);
begin
WinExec(PChar(\'\"\'+WinampPath+\'\\winamp.exe\" \"\'+Mp3Name+\'\"\'),SW_SHOW);
end;
procedure TWinampApi.AddToPlayList(Mp3Name:String);
begin
WinExec(PChar(\'\"\'+WinampPath+\'\\winamp.exe\" /ADD \"\'+Mp3Name+\'\"\'),SW_SHOW);
end;
procedure TWinampApi.Play();
begin
SendMessage(WinampHnd, WM_COMMAND, 40045, 0);
end;
procedure TWinampApi.Stop();
begin
SendMessage(WinampHnd, WM_COMMAND, 40047, 0);
end;
procedure TWinampApi.Pause();
begin
SendMessage(WinampHnd, WM_COMMAND, 40046, 0);
end;
procedure TWinampApi.NextTrack();
begin
SendMessage(WinampHnd, WM_COMMAND, 40048, 0);
end;
procedure TWinampApi.PreviousTrack();
begin
SendMessage(WinampHnd, WM_COMMAND, 40044, 0);
end;
procedure TWinampApi.Forward5Seconds();
begin
SendMessage(WinampHnd, WM_COMMAND, 40148, 0);
end;
procedure TWinampApi.Back5Seconds();
begin
SendMessage(WinampHnd, WM_COMMAND, 40144, 0);
end;
procedure TWinampApi.StartOfPlayList();
begin
SendMessage(WinampHnd, WM_COMMAND, 40154, 0);
end;
procedure TWinampApi.VolumeUp();
begin
SendMessage(WinampHnd, WM_COMMAND, 40058, 0);
end;
procedure TWinampApi.VolumeDown();
begin
SendMessage(WinampHnd, WM_COMMAND, 40059, 0);
end;
procedure TWinampApi.FadeOutStop();
begin
SendMessage(WinampHnd, WM_COMMAND, 40147, 0);
end;
function TWinampApi.getWhatsPlaying():String;
var
TitleLen: integer;
TempInt : Integer;
TempStr: String;
begin
TempStr := \'Winamp isn\'\'t running\';
if WinampHnd <> 0 then
begin
// Get wHnd text
TitleLen := GetWindowTextLength(WinampHnd)+2;
SetLength(TempStr,TitleLen);
GetWindowText(WinampHnd,Pchar(TempStr),TitleLen);
SetLength(TempStr,Length(TempStr));
// Remove \'- Winamp\' part
TempInt := Pos(\'- Winamp\',TempStr);
TempStr := Copy(TempStr,0,TempInt -2); // Knock of space and -
end;
result := TempStr;
end;
procedure TWinampApi.getPlayList(var PlayList:TStringList;var FileList:TStringList);
var
Buffer: string;
Stream: TFileStream;
FileStr : String;
TempList : TStringList;
TempListLen : Integer;
TempStr,TempStr2 : String;
TempPos,TempPos2 : Integer;
i : Integer;
begin
SendMessage(WinampHnd,WM_USER,0,120);
Stream := TFileStream.Create(WinampPath+\'\\winamp.m3u\', fmShareDenyNone);
try
SetLength(buffer, Stream.Size);
Stream.Read(Buffer[1], Stream.Size);
FileStr := Buffer;
finally
Stream.Free;
end;
TempList := TStringList.Create;
TempListLen := Split(\'#\',FileStr,TempList);
// Start from 1 to cut out \'#EXTM3U\'. Grab Name and Filename
for i:=2 to TempListLen -1 do
begin
TempPos := Pos(\',\',TempList.Strings[i]);
TempPos2 := Pos(#13,TempList.Strings[i]);
TempStr := Copy(TempList.Strings[i],TempPos +1,(TempPos2 -1) - TempPos);
TempStr2 := Copy(TempList.Strings[i],TempPos2 +2,(Length(TempList.Strings[i]) -1) - (TempPos2 +2));
PlayList.Add(TempStr);
FileList.Add(TempStr2);
end;
TempList.Free;
end;
{ ----- PUBLIC RETURN METHODS ---- }
function TWinampApi.getSongState():String;
var
SongState : Word;
SongStateStr : String;
begin
SongState := SendMessage(WinampHnd,WM_USER,0,104);
case SongState of
1: SongStateStr:= \'playing\';
3: SongStateStr:= \'paused\';
0: SongStateStr:= \'stopped\'
else
SongStateStr := \'unknown\';
end;
Result := SongStateStr;
end;
function TWinampApi.getSongPosition():String;
var
TempInt : Integer;
begin
TempInt := SendMessage(WinampHnd,WM_USER,0,105);
if SongPosParseTime then
Result := ConvertTime(TempInt,1000)
else
Result := IntToStr(TempInt);
end;
function TWinampApi.getSongLength():String;
var
TempInt : Integer;
begin
TempInt := SendMessage(WinampHnd,WM_USER,1,105);
if SongLengthParseTime then
Result := ConvertTime(TempInt,1)
else
Result := IntToStr(TempInt);
end;
function TWinampApi.getSongSampleRate():String;
begin
Result := IntToStr(SendMessage(WinampHnd,WM_USER,0,126));
end;
function TWinampApi.getSongBitRate():String;
begin
Result := IntToStr(SendMessage(WinampHnd,WM_USER,1,126));
end;
function TWinampApi.getSongChannels():String;
begin
Result := IntToStr(SendMessage(WinampHnd,WM_USER,2,126));
end;
function TWinampApi.getPlayListPosition():String;
var
TempInt : Integer;
begin
TempInt := SendMessage(WinampHnd,WM_USER,0,125);
if StrToInt(getPlayListLength()) <1 then
Result := IntToStr(TempInt)
else
Result := IntToStr(TempInt +1);
end;
function TWinampApi.getPlayListLength():String;
begin
Result := IntToStr(SendMessage(WinampHnd,WM_USER,0,124));
end;
{ ----- PRIVATE METHODS ----- }
function TWinampApi.ConvertTime(n: integer;m : integer): string;
begin
n := n div m;
result := ConvertTimeTool(n div 60) + \':\' + ConvertTimeTool(n mod 60);
end;
function TWinampApi.ConvertTimeTool(n: integer): string;
begin
if n < 10 then
result := \'0\' + inttostr(n)
else
result := inttostr(n);
end;
function TWinampApi.split(seperator: Char; text: String; var list: TStringList): Integer;
var
mypos, number: Integer;
begin
number:=0;
if Length(text) > 0 then
begin
if text[Length(text)] <> seperator then
text:=text+seperator;
while(Pos(String(seperator),text))>0 do
begin
mypos:=Pos(String(seperator),text);
list.Add(Copy(text,1,mypos-1));
text:=Copy(text,mypos+1,Length(text)-mypos);
Inc(number);
end;
end;
Result:=number;
end;
end.