/// <summary> /// Sends a command to Winamp using it's publically visible IPC. /// </summary> /// <param name="sParsedCommand"></param> /// <param name="sPassedValue"></param> public static void WinampCommand(string sParsedCommand, string sPassedValue) { string sFileLocation; try { //Parse this command first, because if WinAMP isnt open, we need to open it and get handles. if (sParsedCommand == "startwinamp") { //Execute WinAMP System.Diagnostics.Process.Start(AppConfiguration.configWinampHomeDirectory + "winamp.exe"); //Wait 5 Seconds for WinAmp to start Thread.Sleep(5000); //Get Handles GetWinampHandles(); } //If the handles are missing, then do not try to call API's if (privHwnd_wa == IntPtr.Zero || hwnd_pe == IntPtr.Zero) { return; } switch (sParsedCommand) { case "stop": SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_STOP, IntPtr.Zero); break; case "play": if (WinampPlaylist.PlaylistItems.Count > 0) { SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_PLAY, IntPtr.Zero); } break; case "skipfwd": SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_SKIPFWD, IntPtr.Zero); break; case "skipback": SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_SKIPBACK, IntPtr.Zero); break; case "pause": SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_PAUSE, IntPtr.Zero); break; case "repeat": SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_REPEAT, IntPtr.Zero); break; case "shuffle": SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_SHUFFLE, IntPtr.Zero); break; case "volume": if (Convert.ToInt16(sPassedValue) >= 0 && Convert.ToInt16(sPassedValue) <= 255) { SendMessage(privHwnd_wa, WM_USER, (IntPtr)Convert.ToInt16(sPassedValue), (IntPtr)WINAMP_SETVOLUME); } break; case "balance": if (Convert.ToInt16(sPassedValue) >= 0 && Convert.ToInt16(sPassedValue) <= 255) { SendMessage(privHwnd_wa, WM_USER, (IntPtr)Convert.ToInt16(sPassedValue), (IntPtr)WINAMP_BALANCE); } break; case "addfile": if (Convert.ToInt16(sPassedValue) <= LibraryController.dbMediaLibrary.Count) { sFileLocation = LibraryController.dbMediaLibrary[Convert.ToInt16(sPassedValue)].FilePath + @"\" + LibraryController.dbMediaLibrary[Convert.ToInt16(sPassedValue)].FileName; AddFileToWinAmpPlaylist(sFileLocation); } break; case "addfolder": //iPassedValue contains 1st file of the folder to be added. if (Convert.ToInt16(sPassedValue) <= LibraryController.dbMediaLibrary.Count) { for (int iLoop = 1; iLoop < LibraryController.dbMediaLibrary.Count; iLoop++) { if (LibraryController.dbMediaLibrary[iLoop].FilePath == LibraryController.dbMediaLibrary[Convert.ToInt16(sPassedValue)].FilePath) { sFileLocation = LibraryController.dbMediaLibrary[iLoop].FilePath + @"\" + LibraryController.dbMediaLibrary[iLoop].FileName; AddFileToWinAmpPlaylist(sFileLocation); } } } break; case "jumppos": //Sets Highlighted Song on Playlist by PlaylistID SendMessage(privHwnd_wa, WM_USER, (IntPtr)Convert.ToInt16(sPassedValue), (IntPtr)PLAYLIST_JUMPTOPOS); //Play highlighted song WinampCommand("play", "0"); break; case "removefile": //Remove song from playlist based on PlaylistID SendMessage(hwnd_pe, WM_USER, (IntPtr)PLAYLIST_REMOVE, (IntPtr)Convert.ToInt16(sPassedValue)); break; case "clear": //Clear Playlist SendMessage(privHwnd_wa, WM_USER, IntPtr.Zero, (IntPtr)PLAYLIST_CLEAR); break; case "rescan": //Call Library Updader Thread thBuildMediaLibrary = new Thread(new ThreadStart(LibraryController.BuildMediaLibrary)); thBuildMediaLibrary.Start(); break; case "shutdown": //Closes WWWinamp System.Environment.Exit(1); break; case "closewinamp": //Closes WinAmp SendMessage(privHwnd_wa, WM_SYSCOMMAND, (IntPtr)WINAMP_EXIT, IntPtr.Zero); break; case "restartwinamp": //Restarts WinAmp SendMessage(privHwnd_wa, WM_USER, IntPtr.Zero, (IntPtr)WINAMP_RESTART); //Wait 5 Seconds for WinAmp to start Thread.Sleep(5000); //Get Handles GetWinampHandles(); break; case "saveplaylist": //Call IPC to save playlist to WINAMP.M3U lock (threadLock) { SendMessage(privHwnd_wa, WM_USER, IntPtr.Zero, (IntPtr)PLAYLIST_WRITEPLAYLIST); } //Copy WINAMP.M3U to SavedPlaylists Folder as filename specified in URL/POST File.Copy(AppConfiguration.configWinampHomeDirectory + "winamp.m3u", AppConfiguration.configWinampPlaylistDirectory + sPassedValue); break; case "moveup": Playlist_MoveSongUp(Convert.ToInt16(sPassedValue)); break; case "movedown": Playlist_MoveSongDown(Convert.ToInt16(sPassedValue)); break; } } catch (Exception e) { LogHandler.LogError(e); } }