⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cnwinampctrl.pas

📁 phonectrl是一款利用手机遥控电脑的软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  cds : COPYDATASTRUCT;
begin
  PPath := PChar(strPath);
  cds.dwData := IPC_PLAYFILE;
  cds.lpData := PPath;
  cds.cbData := strlen(cds.lpData)+1; // include space for null char
  SendMessageToWinamp(WM_COPYDATA, WPARAM(0), LPARAM(@cds));
  if FAutoFind then WritePlayList;
end;

procedure TCnWinampCtrl.ClearPlayList;
begin
  SendMessageToWinamp(WM_WA_IPC, 0, IPC_DELETE);
  if FAutoFind then WritePlayList;
end;

procedure TCnWinampCtrl.CloseWinamp;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_FILE_QUIT ,0);
  FWndWinamp := 0;
end;

function TCnWinampCtrl.FindWinamp: Boolean;
begin
  FWndWinamp := FindWindow(WinampClassName, nil);
  Result := IsFound;
end;

procedure TCnWinampCtrl.FFW_5sec;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_FFWD5S, 0);
end;

procedure TCnWinampCtrl.GetComponentInfo(var AName, Author, Email, Comment:
    string);
begin
  AName := 'Winamp控制器组件';
  Author := '小冬';
  Email := 'kendling@21cn.com';
  Comment := '可以控制Winamp的一个小小控件';
end;

function TCnWinampCtrl.GetEQData(const Index: TEQDataSelect): Byte;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, Ord(Index), IPC_GETEQDATA);
end;

function TCnWinampCtrl.GetInfo(const iMode: Integer): Integer;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, iMode, IPC_GETINFO);
end;

function TCnWinampCtrl.GetPlayList: string;
var
  slPlayList, slCPlayList: TStrings;
  i, j: Integer;
begin
  {检测是否设置了Winamp路径}
  Result := '';
  if not FileExists(FWAPath) then Exit;
  if FAutoFind then WritePlayList;
  {获取当前播放列表}
  slPlayList := TStringList.Create;
  slCPlayList := TStringList.Create;
  slPlayList.LoadFromFile(ChangeFileExt(FWAPath, '.m3u'));
  if UpperCase(slPlayList[0]) = '#EXTM3U' then
  begin
    i := 1;
    while i < slPlayList.Count do
    begin
      if UpperCase(Copy(slPlayList[i], 1, 7)) = '#EXTINF' then
      begin
        j := AnsiPos(',', slPlayList[i]);
        slCPlayList.Add(Copy(slPlayList[i], j+1, 256));
        Inc(i);
      end else
      begin
        slCPlayList.Add(ExtractFileName(slPlayList[i]));
      end;
      Inc(i);
    end;
  {输出播放列表}
    Result := slCPlayList.CommaText;
  end;
  slPlayList.Free;
  slCPlayList.Free;
end;

function TCnWinampCtrl.GetIsFound: Boolean;
begin
  Result := FWndWinamp <> 0; //INVALID_HANDLE_VALUE [DWord(-1)]; 2005.3.7 QQCAT
end;

procedure TCnWinampCtrl.GetPlayListCount;
begin
  SendMessageToWinamp(WM_WA_IPC, 0, IPC_GETLISTLENGTH);
end;

function TCnWinampCtrl.GetPlayListPos: Integer;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, 0, IPC_GETLISTPOS);
end;

function TCnWinampCtrl.GetTimeLength: Integer;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, 1, IPC_GETOUTPUTTIME);
end;

function TCnWinampCtrl.GetVersion: string;
begin
  Result := IntToHex(SendMessageToWinamp(WM_WA_IPC, 0, IPC_GETVERSION), 2);
  if Result = '00' then
  begin
    Result := '0';
    Exit;
  end;
  if Result[1] = '2' then Result[3] := Result[2];
  if Result[1] = '1' then Result[3] := Result[2];
    Result[2] := '.';
end;

function TCnWinampCtrl.GetVolume: Byte;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, -666, IPC_SETVOLUME);
end;

function TCnWinampCtrl.GetVolBalance: Integer;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, -666, IPC_SETPANNING);
end;

function TCnWinampCtrl.GetWACurrentTime: Integer;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, 0, IPC_GETOUTPUTTIME);
end;

function TCnWinampCtrl.GetWARepeat: Boolean;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, 0, IPC_GET_REPEAT)>0;
end;

function TCnWinampCtrl.GetWAShufle: Boolean;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, 0, IPC_GET_SHUFFLE)>0;
end;

function TCnWinampCtrl.GetWAState: Integer;
begin
  Result := SendMessageToWinamp(WM_WA_IPC, 0, IPC_ISPLAYING);
end;

procedure TCnWinampCtrl.JUMP10BACK;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_JUMP10BACK, 0);
end;

procedure TCnWinampCtrl.JUMP10FWD;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_JUMP10FWD, 0);
end;

procedure TCnWinampCtrl.NextTack;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_BUTTON5, 0);
end;

procedure TCnWinampCtrl.Pause;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_BUTTON3, 0);
end;

procedure TCnWinampCtrl.Play;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_BUTTON2, 0);
end;

procedure TCnWinampCtrl.PlayIndex(const Index: Integer);
begin
  SendMessageToWinamp(WM_WA_IPC, WPARAM(Index), IPC_CHANGECURRENTFILE);
end;

procedure TCnWinampCtrl.PlayListSortInFileName;
begin
  SendMessageToWinamp(WM_COMMAND, IDC_SORT_FILENAME, 0);
end;

procedure TCnWinampCtrl.PlayListSortInFilePath;
begin
  SendMessageToWinamp(WM_COMMAND, IDC_SORT_ENTIREFILENAME, 0);
end;

procedure TCnWinampCtrl.PlayListSortInTitle;
begin
  SendMessageToWinamp(WM_COMMAND, IDC_SORT_FILETITLE, 0);
end;

procedure TCnWinampCtrl.PrevTrack;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_BUTTON1, 0);
end;

procedure TCnWinampCtrl.RestartWinamp;
begin
  SendMessageToWinamp(WM_WA_IPC, 0, IPC_RESTARTWINAMP);
end;

procedure TCnWinampCtrl.REW_5sec;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_REW5S, 0);
end;

function TCnWinampCtrl.SendMessageToWinamp(Msg: Cardinal; wParam: WPARAM;
        lParam: LPARAM): Integer;
begin
  Result := 0;
  if not IsFound then Exit;
  Result := SendMessage(FWndWinamp, Msg, wParam, lParam);
end;

procedure TCnWinampCtrl.SetEnabledWAWindow(const Value: Boolean);
begin
  if Value then
    SendMessageToWinamp(WM_WA_IPC, 0, IPC_ENABLEDISABLE_ALL_WINDOWS)
  else
    SendMessageToWinamp(WM_WA_IPC, WPARAM($DEADBEEF), IPC_ENABLEDISABLE_ALL_WINDOWS);
end;

procedure TCnWinampCtrl.SetEQData(const Index: TEQDataSelect; const Value:
    Byte);
begin
  SendMessageToWinamp(WM_WA_IPC, Ord(Index), IPC_GETEQDATA);
  SendMessageToWinamp(WM_WA_IPC, Value, IPC_SETEQDATA);
end;

procedure TCnWinampCtrl.SetPlayListPos(const Value: Integer);
begin
  SendMessageToWinamp(WM_WA_IPC, Value, IPC_SETPLAYLISTPOS)
end;

procedure TCnWinampCtrl.SetVolume(const Value: Byte);
begin
  SendMessageToWinamp(WM_WA_IPC, Value, IPC_SETVOLUME);
end;

procedure TCnWinampCtrl.SetVolBalance(const Value: Integer);
begin
  SendMessageToWinamp(WM_WA_IPC, Value, IPC_SETPANNING);
end;

procedure TCnWinampCtrl.SetWACurrentTime(const Value: Integer);
begin
  SendMessageToWinamp(WM_WA_IPC, Value, IPC_JUMPTOTIME);
end;

procedure TCnWinampCtrl.SetWARepeat(const Value: Boolean);
begin
  SendMessageToWinamp(WM_WA_IPC, Integer(Value), IPC_SET_REPEAT);
end;

procedure TCnWinampCtrl.SetWAShufle(const Value: Boolean);
begin
  SendMessageToWinamp(WM_WA_IPC, Integer(Value), IPC_SET_SHUFFLE);
end;

function TCnWinampCtrl.StartWinamp(const strWAPath: string=''): Boolean;
begin
  Result := False;
  if strWAPath <> '' then FWAPath := strWAPath;
  if not FileExists(FWAPath) then Exit;
  if ShellExecute(0, '', PChar(FWAPath), PChar('/CLASS="'+WinAmpClassName+'"'),
    PChar(ExtractFilePath(FWAPath)), SW_MINIMIZE) > 32 then
    Result := True;
  if FAutoFind then
  begin
    Sleep(FStartDelay);
    FindWinamp;
  end;
end;

procedure TCnWinampCtrl.Stop;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_BUTTON4, 0);
end;

procedure TCnWinampCtrl.VolumeDown;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_VOLUMEDOWN, 0);
end;

procedure TCnWinampCtrl.VolumeUp;
begin
  SendMessageToWinamp(WM_COMMAND, WINAMP_VOLUMEUP, 0);
end;

procedure TCnWinampCtrl.WritePlayList;
begin
  SendMessageToWinamp(WM_WA_IPC, 0, IPC_WRITEPLAYLIST);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -