Winamp & Delphi ilişkilendirme ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Winamp & Delphi ilişkilendirme ?

Mesaj gönderen ByDeniS »

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.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
baypipox
Üye
Mesajlar: 122
Kayıt: 16 Eki 2006 04:23
İletişim:

Re: Winamp & Delphi ilişkilendirme ?

Mesaj gönderen baypipox »

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...

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. 
Cevapla