Click here to Skip to main content
15,897,371 members
Articles / Programming Languages / XML

WMP Playlist Fix

Rate me:
Please Sign up or sign in to vote.
4.80/5 (2 votes)
6 Dec 2013CPOL6 min read 20.5K   546   5  
The goal is to clean-up double entries in Windows Media Player playlists because the player doesn’t do that itself. For that, a WPL class has been written, and a program that uses that class.
//
// WMPPlayListTool - Simple Windows Media Player Playlist Controller.
// Copyright (C) 2009-2013 John Janssen
// http://www.travelisfun.net 
//
// This program is free software; you can redistribute it and/or modify
// it any way you want as long as the above copyright statement is maintained.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
//

using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WPLControlLib;

namespace WMPPlayListFix
{
  public partial class MainForm : Form
  {
    // P/Invoke constants
    private const int WM_SYSCOMMAND = 0x112;
    private const int MF_STRING = 0x0;
    private const int MF_SEPARATOR = 0x800;

    // P/Invoke declarations
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, string lpNewItem);


    // ID for the About item on the system menu
    private int SYSMENU_ABOUT_ID = 0x1;
    private WPLControlLib.WMPPlayListCtrl wmpPlayListCtrl;
  
    public static String RegistryPath
    {
      get { return @"Software\J-Software\WMPPlayListFix"; }
    }
    /// <summary>
    /// 
    /// </summary>
    public MainForm()
    {
      InitializeComponent();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void MainForm_Load(object sender, EventArgs e)
    {
      //wmpPlayListCtrl = new WMPPlayListCtrl(RegistryPath);
      //this.Controls.Add(wmpPlayListCtrl);

      String filename = WMPPlayList.GetPlayListSavePath() + @"\A00.WPL";
      WMPPlayList pl = new WMPPlayList();
      pl.Add(@"C:\C:\Users\JohnJanssen\Music\1 Giant Leap\1 Giant Leap\01-Dunya Salam.mp3");
      pl.Store(filename, "Test list of creating WPL");

    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="e"></param>
    protected override void OnHandleCreated(EventArgs e)
    {
      base.OnHandleCreated(e);

      // Get a handle to a copy of this form's system (window) menu
      IntPtr hSysMenu = GetSystemMenu(this.Handle, false);

      // Add a separator
      AppendMenu(hSysMenu, MF_SEPARATOR, 0, string.Empty);

      // Add the About menu item
      AppendMenu(hSysMenu, MF_STRING, SYSMENU_ABOUT_ID, "&About…");
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="m"></param>
    protected override void WndProc(ref Message m)
    {
      base.WndProc(ref m);
      // Test if the About item was selected from the system menu
      if ((m.Msg == WM_SYSCOMMAND) && ((int)m.WParam == SYSMENU_ABOUT_ID))
      {
        AboutForm frm = new AboutForm();
        frm.ShowDialog(this);
      }
    }

  }
}
/*
public class CustomForm : Form
{

    public CustomForm()
    {
    }

}
 */

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
South Africa South Africa
Started in 1988 programming in Pascal, making a 68000 emulator on a DOS platform. Then from Pascal to Clipper, to C++ and now using C#. I've been programming for all walks of businesses; opticians, opthomologist, carbage collectors, reinforcement steel producers, retail chains, and more.
I'm now travelling through Africa with a home-build expedition truck.

Comments and Discussions