wpf和wp7版网络音乐播放器,使用虾米网的资源
软件介绍:本软件使用虾米网的资源,真正下载虾米网的音乐要用积分,所以在这不添加下载功能。代码也只贴部分。我用的NetFramework4.0 不知道在别的电脑上能不能支持。
api是怎么得到的,就是下载它的swf文件,然后反编译,分析代码找到xml地址,MP3地址是加密的,解密算法也是在swf文件里,有兴趣的同学可以研究一下。还有个budge ,mediaElement不在咋了,pause不好使,就是停不下,所以改成了静音效果,伪装成暂停。
下载地址(非源码):http://files.cnblogs.com/wxdtk1989/SkyMusic.zip 不足之处请谅解。
图:



部分代码:
xaml:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ec="http://schemas.microsoft.com/expression/2010/controls"
xmlns:SkyMuisc_Properties="clr-namespace:SkyMuisc.Properties"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="SkyMuisc.MainWindow"
Title="天空的声音" Height="550" Width="280" WindowStartupLocation="CenterScreen" MaxWidth="280" MaxHeight="550" WindowStyle="SingleBorderWindow" MinWidth="280" MinHeight="550" FontSize="16" Icon="/SkyMuisc;component/20100829224935145.ico" Loaded="Window_Loaded" MouseDown="Window_MouseDown">
<Window.ContextMenu>
<ContextMenu Name="contextmenu1">
<MenuItem Header="关于我" Name="MenuItem1" Click="MenuItem1_Click" />
<MenuItem Header="退出" Name="MenuItem2" Click="MenuItem2_Click"/>
</ContextMenu>
</Window.ContextMenu>
<Window.Resources>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates" ei:ExtendedVisualStateManager.UseFluidLayout="True">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ellipse">
<EasingDoubleKeyFrame KeyTime="0" Value="0.56"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse" Stroke="Black" StrokeThickness="3">
<Ellipse.Fill>
<ImageBrush ImageSource="appbar.transport.play.rest.png"/>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True"/>
<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ButtonStyle2" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates" ei:ExtendedVisualStateManager.UseFluidLayout="True">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ellipse">
<EasingDoubleKeyFrame KeyTime="0" Value="0.56"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse" Stroke="Black" StrokeThickness="3">
<Ellipse.Fill>
<ImageBrush ImageSource="appbar.transport.pause.rest.png"/>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True"/>
<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ButtonStyle3" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates" ei:ExtendedVisualStateManager.UseFluidLayout="True">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ellipse">
<EasingDoubleKeyFrame KeyTime="0" Value="0.56"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse" Stroke="Black" StrokeThickness="3">
<Ellipse.Fill>
<ImageBrush ImageSource="appbar.transport.ff.rest.png"/>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True"/>
<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ButtonStyle4" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates" ei:ExtendedVisualStateManager.UseFluidLayout="True">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ellipse">
<EasingDoubleKeyFrame KeyTime="0" Value="0.56"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="ellipse">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<System:Double>35</System:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse" Stroke="Black" StrokeThickness="3">
<Ellipse.Fill>
<ImageBrush ImageSource="appbar.download.rest.png"/>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True"/>
<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="148*" />
<RowDefinition Height="200" />
<RowDefinition Height="30*" />
<RowDefinition Height="133*" />
</Grid.RowDefinitions>
<Expander Height="58" HorizontalAlignment="Left" x:Name="expander1" VerticalAlignment="Top" Width="254" Header="频道选择" Margin="1,73,0,0" RenderTransformOrigin="0.5,0.5" Grid.Row="3">
<Expander.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Expander.RenderTransform>
<WrapPanel Height="24" Name="wrapPanel1" Width="244" >
<RadioButton Content="动漫" Height="26" Name="radioButton1" IsChecked="False" Checked="radioButton1_Checked" />
<RadioButton Content="华语" Height="26" Name="radioButton2" Checked="radioButton2_Checked" />
<RadioButton Content="欧美" Height="26" Name="radioButton3" Checked="radioButton3_Checked" />
<RadioButton Content="日语" Height="26" Name="radioButton4" Checked="radioButton4_Checked" />
<RadioButton Content="韩语" Height="26" Name="radioButton5" Checked="radioButton5_Checked" />
</WrapPanel>
</Expander>
<Rectangle Height="15" HorizontalAlignment="Left" Margin="35,146,0,0" x:Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="185" StrokeThickness="0" Grid.RowSpan="2">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="1" />
<GradientStop Color="Transparent" Offset="0.099" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Height="185" HorizontalAlignment="Left" Margin="218,10,0,0" x:Name="rectangle2" Stroke="Black" VerticalAlignment="Top" Width="15" StrokeThickness="0" Grid.Row="1">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Transparent" Offset="0.814" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Height="20" HorizontalAlignment="Left" Margin="35,190,0,0" x:Name="rectangle4" Stroke="Black" VerticalAlignment="Top" Width="185" StrokeThickness="0" Grid.Row="1" Grid.RowSpan="2">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Transparent" Offset="0.872" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Height="185" HorizontalAlignment="Left" Margin="23,10,0,0" x:Name="rectangle3" Stroke="Black" VerticalAlignment="Top" Width="15" StrokeThickness="0" Grid.Row="1">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="Black" Offset="1" />
<GradientStop Color="Transparent" Offset="0.099" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Image Grid.Row="1" Height="185" HorizontalAlignment="Left" Margin="35,10,0,0" Name="image2" Stretch="UniformToFill" VerticalAlignment="Top" Width="185" Source="/SkyMuisc;component/Images/20100829224935145.png" />
<Image Height="185" HorizontalAlignment="Left" Margin="35,10,0,0" x:Name="image1" Stretch="UniformToFill" VerticalAlignment="Top" Width="185" Source="{Binding ElementName=textBox1,Path=Text}" Grid.Row="1" ToolTip="专辑图片" />
<Rectangle Height="28" HorizontalAlignment="Left" Margin="35,197,0,0" x:Name="rectangle5" Stroke="Black" VerticalAlignment="Top" Width="185" Stretch="UniformToFill" StrokeThickness="0" Grid.Row="1" Grid.RowSpan="2" >
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=image1}">
<VisualBrush.RelativeTransform >
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="-1"/>
<TranslateTransform Y="1"/>
</TransformGroup>
</VisualBrush.RelativeTransform>
</VisualBrush>
</Rectangle.Fill>
<Rectangle.OpacityMask>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="#2DFFFFFF" Offset="0.081" />
</LinearGradientBrush>
</Rectangle.OpacityMask>
</Rectangle>
<TextBlock Height="23" HorizontalAlignment="Left" Margin="31,31,0,0" x:Name="textBlock1" Text="歌曲:" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="31,69,0,0" x:Name="textBlock2" Text="演唱:" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="31,106,0,0" x:Name="textBlock3" Text="专辑:" VerticalAlignment="Top" />
<TextBlock Height="40" HorizontalAlignment="Left" Margin="85,31,0,0" x:Name="textBlocksong" Text="无" VerticalAlignment="Top" Width="163" TextWrapping="Wrap" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="85,69,0,0" x:Name="textBlocksing" Text="无" VerticalAlignment="Top" Width="163" />
<TextBlock Height="42" HorizontalAlignment="Left" Margin="85,106,0,0" x:Name="textBlockalbum" Text="无" VerticalAlignment="Top" Width="163" TextWrapping="Wrap" />
<MediaElement Grid.Row="1" Height="42" HorizontalAlignment="Left" Margin="5,38,0,0" Name="mediaElementsong" VerticalAlignment="Top" Width="26" UnloadedBehavior="Manual" MediaEnded="mediaElementsong_MediaEnded" MediaFailed="mediaElementsong_MediaFailed" />
<TextBox Grid.RowSpan="2" Height="243" HorizontalAlignment="Left" Margin="12,20,0,0" Name="textBox1" VerticalAlignment="Top" Width="246" TextWrapping="Wrap" FontSize="12" Visibility="Hidden" />
<Button Content="Button" HorizontalAlignment="Left" Margin="69,0,0,66" Style="{DynamicResource ButtonStyle1}" Width="40" Height="40" VerticalAlignment="Bottom" Grid.Row="3" Name="buttonstart" Click="buttonstart_Click" ToolTip="播放" IsEnabled="False" />
<Button Content="Button" HorizontalAlignment="Left" Margin="70,0,0,66" Style="{DynamicResource ButtonStyle2}" Width="40" Height="40" VerticalAlignment="Bottom" Grid.Row="3" Name="buttonpause" Visibility="Collapsed" Click="buttonpause_Click" ToolTip="暂停" />
<Button Content="Button" HorizontalAlignment="Left" Margin="115,0,0,66" Style="{DynamicResource ButtonStyle3}" Width="40" Height="40" VerticalAlignment="Bottom" Grid.Row="3" Name="buttonnext" Click="buttonnext_Click" Visibility="Visible" IsEnabled="False" ToolTip="下一首" />
<Button Content="Button" HorizontalAlignment="Left" Margin="161,0,0,66" Style="{DynamicResource ButtonStyle4}" Width="40" Height="40" VerticalAlignment="Bottom" Grid.Row="3" Name="buttondown" Click="buttondown_Click" ToolTip="下载到桌面" IsEnabled="False" />
<CheckBox Content="玻璃效果" Height="22" HorizontalAlignment="Left" Margin="25,5,0,0" Name="checkBox1" VerticalAlignment="Top" IsChecked="True" Unchecked="checkBox1_Unchecked" Checked="checkBox1_Checked" />
<TextBlock Height="31" HorizontalAlignment="Left" Margin="70,127,0,0" Name="textBlock4" Text="正在初始化......" VerticalAlignment="Top" Foreground="#FFEB1B1B" Grid.RowSpan="2" FontSize="18" />
<ProgressBar Grid.Row="3" Height="10" HorizontalAlignment="Left" Margin="47,6,0,0" Name="progressBar1" VerticalAlignment="Top" Width="168" Panel.ZIndex="1" ToolTip="进度" IsEnabled="True" Background="#78DECACA">
<ProgressBar.Foreground>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF0A0705" Offset="1" />
<GradientStop Color="#FF56585C" Offset="0" />
<GradientStop Color="Black" Offset="0.459" />
</LinearGradientBrush>
</ProgressBar.Foreground>
</ProgressBar>
<TextBlock Grid.Row="3" Height="19" HorizontalAlignment="Left" Margin="219,2,0,0" Name="textBlock5" Text="00:00" VerticalAlignment="Top" FontSize="14" Width="37" />
<TextBlock FontSize="14" Height="19" HorizontalAlignment="Left" Margin="7,2,0,0" Name="textBlock6" Text="00:00" VerticalAlignment="Top" Width="37" Grid.Row="3" />
<Label Content="{x:Static System:Environment.UserName}" Height="38" HorizontalAlignment="Left" Margin="115,-1,0,0" Name="label1" VerticalAlignment="Top" Width="59" Visibility="Collapsed" />
<Expander Header="定时关机" Height="100" HorizontalAlignment="Left" Margin="124,7,0,0" Name="expander2" VerticalAlignment="Top" Width="132" BorderThickness="3">
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="8,6,0,0" Name="textBox2" VerticalAlignment="Top" Width="46" BorderThickness="2" BorderBrush="#E6000000" Background="#00000000" FontSize="14" HorizontalContentAlignment="Center" TextAlignment="Center" Text="" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="59,6,0,0" Name="textBlock7" Text="分钟关机" VerticalAlignment="Top" Width="66" />
<CheckBox Content="确定" Height="25" HorizontalAlignment="Left" Margin="37,36,0,0" Name="checkBox2" VerticalAlignment="Top" Width="56" Checked="checkBox2_Checked" Unchecked="checkBox2_Unchecked" />
</Grid>
</Expander>
</Grid>
</Window>
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Interop;
using System.Runtime.InteropServices;
using System.IO;
using System.Xml.Linq;
using System.Net;
using System.Windows.Threading;
namespace SkyMuisc
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public string albumurl;
public string[] title1 = new string[80];//歌名
public string[] album_name1 = new string[80];//专辑
public string[] artist1 = new string[80];//歌手
public string[] pic1 = new string[80];//图片
public string[] location1 = new string[80];//地址
public int x = 0,y=0,z=0,w=0;
DispatcherTimer t = new DispatcherTimer();
DispatcherTimer t1 = new DispatcherTimer();
public MainWindow()
{
InitializeComponent();
}
[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}
#region 引用 Dll
[DllImport("DwmApi.dll")]
public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS pMarInset);
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll", EntryPoint = "ReleaseCapture")]
public static extern int ReleaseCapture();
public const int WM_SysCommand = 0x0112;
public const int SC_MOVE = 0xF012;
[DllImport ("e_xitong.dll")]
public static extern void guanji();
#endregion
private void Window_Loaded(object sender, RoutedEventArgs e)
{
try
{
StreamReader r = new StreamReader("stye.txt");
string radioche = r.ReadToEnd();
r.Close();
if (radioche=="动漫")
{
radioButton1.IsChecked = true;
}
if (radioche == "华语")
{
radioButton2.IsChecked = true;
}
if (radioche == "欧美")
{
radioButton3.IsChecked = true;
}
if (radioche == "日语")
{
radioButton4.IsChecked = true;
}
if (radioche == "韩语")
{
radioButton5.IsChecked = true;
}
}
catch (Exception)
{
albumurl = albumid("动漫");
radioButton1.IsChecked = true;
}
// xmlMusic(albumurl);
this.Background = Brushes.Transparent;
ExtendAeroGlass(this);
}
private void ExtendAeroGlass(Window window)
{
try
{
// 为WPF程序获取窗口句柄
IntPtr mainWindowPtr = new WindowInteropHelper(window).Handle;
HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;
// 设置Margins
MARGINS margins = new MARGINS();
// 扩展Aero Glass
margins.cxLeftWidth = -1;
margins.cxRightWidth = -1;
margins.cyTopHeight = -1;
margins.cyBottomHeight = -1;
int hr = DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
if (hr < 0)
{
checkBox1.IsChecked = false;
MessageBox.Show("玻璃效果加载失败!");
}
}
catch (DllNotFoundException)
{
Application.Current.MainWindow.Background = Brushes.White;
}
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
IntPtr mainWindowPtr = new WindowInteropHelper(this).Handle;
HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
ReleaseCapture();
SendMessage(mainWindowSrc.Handle.ToInt32(), WM_SysCommand, SC_MOVE, 0);
}
private void buttonstart_Click(object sender, RoutedEventArgs e)
{
w = 0;
buttonnext.IsEnabled = true;
buttonstart.Visibility = Visibility.Collapsed;
buttonpause.Visibility = Visibility.Visible;
textBlock4.Visibility = Visibility.Collapsed;
if (z == 0)
{
information();
}
mediaElementsong.Volume = 1;
t.Interval = new TimeSpan(0,0,1);
t.Start();
t.Tick += new EventHandler(t_Tick);
// mediaElementsong.Play();
}
void t_Tick(object sender, EventArgs e)
{
try
{
textBlock5.Text = (mediaElementsong.NaturalDuration).ToString().Substring(3, 5);
textBlock6.Text = (mediaElementsong.Position).ToString().Substring(3, 5);
progressBar1.Value =(int)(((double.Parse(textBlock6.Text.Substring(0, 2)) * 60 + double.Parse(textBlock6.Text.Substring(3, 2)))
/ (double.Parse(textBlock5.Text.Substring(0, 2)) * 60 + double.Parse(textBlock5.Text.Substring(3, 2)))) * 100);
}
catch (Exception)
{
}
}
private void buttonpause_Click(object sender, RoutedEventArgs e)
{
w = 1;
buttonstart.Visibility = Visibility.Visible;
buttonpause.Visibility = Visibility.Collapsed;
mediaElementsong.Volume = 0; //假暂停
//+mediaElementsong.NaturalDuration+'\n'
//+mediaElementsong.Position+'\n';
z = 1;
}
private void buttonnext_Click(object sender, RoutedEventArgs e)
{
buttonstart.Visibility = Visibility.Collapsed;
buttonpause.Visibility = Visibility.Visible;
w = 0;
nextSong();
progressBar1.Value = 0;
t.Interval = new TimeSpan(0, 0, 1);
t.Start();
t.Tick += new EventHandler(t_Tick);
}
private void nextSong()
{
x++;
try
{
if (x <= y)
{
information();
textBlock4.Visibility = Visibility.Collapsed;
}
else
{
textBlock4.Visibility = Visibility.Visible;
textBlock4.Text = "加载下一专辑中...";
x = 0;
xmlMusic(albumurl);
information();
textBlock4.Visibility = Visibility.Collapsed;
}
}
catch (Exception)
{
}
}
private void information()
{
try
{
textBlocksing.Text = artist1[x];
textBlocksong.Text = title1[x];
textBlockalbum.Text = album_name1[x];
textBox1.Text = pic1[x];
mediaElementsong.Source = new Uri(location1[x]);
mediaElementsong.Play();
Binding bing = new Binding();
bing.Source = textBox1;
bing.Path = new PropertyPath("Text");
image1.SetBinding(TextBox.TextProperty, bing);
}
catch (Exception)
{
MessageBox.Show("没有地址!!");
}
}
private void buttondown_Click(object sender, RoutedEventArgs e)
{
try
{
//
}
catch (Exception)
{
MessageBox.Show("出什么问题了?下不了");
}
}
private string albumid(string some)
{
string id = "";
XDocument xdo = XDocument.Load("albumid/"+some+".xml");
var album = (from query in xdo.Elements("album")
select query).FirstOrDefault().Value.Split(']');
Random rid = new Random();
id=album[rid.Next(0, 200)];
return id;
}
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
try
{
albumurl = albumid("动漫");
xmlMusic(albumurl);
x = 0;
StreamWriter win = new StreamWriter("stye.txt");
win.Write("动漫");
win.Close();
}
catch (Exception)
{
}
}
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
albumurl = albumid("华语");
xmlMusic(albumurl);
x = 0;
StreamWriter win = new StreamWriter("stye.txt");
win.Write("华语");
win.Close();
}
private void radioButton3_Checked(object sender, RoutedEventArgs e)
{
albumurl = albumid("欧美");
xmlMusic(albumurl);
x = 0;
StreamWriter win = new StreamWriter("stye.txt");
win.Write("欧美");
win.Close();
}
private void radioButton4_Checked(object sender, RoutedEventArgs e)
{
albumurl = albumid("日语");
xmlMusic(albumurl);
x = 0;
StreamWriter win = new StreamWriter("stye.txt");
win.Write("日语");
win.Close();
}
private void radioButton5_Checked(object sender, RoutedEventArgs e)
{
albumurl = albumid("韩语");
xmlMusic(albumurl);
x = 0;
StreamWriter win = new StreamWriter("stye.txt");
win.Write("韩语");
win.Close();
}
private void xmlMusic(string some)
{
string httpurl = "http://www.xiami.com。。。。。。";
WebClient webc = new WebClient();
webc.OpenReadAsync(new Uri(httpurl + some + "/type/3"));
webc.OpenReadCompleted += new OpenReadCompletedEventHandler(webc_OpenReadCompleted);
}
void webc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
int a = 1, b = 1, c = 1, d = 1, e1 = 1, f = 1, g = 1, h = 1, j = 1, k = 1;
string webxml;
songApi songuri = new songApi();
try
{
using (StreamReader read = new StreamReader(e.Result, Encoding.UTF8))
{
webxml = read.ReadToEnd();
}
for (int i = 0; i < 60; i++)
{
try
{ //读xml时出问题,我就改成字符串操作了,也挺好的
a = webxml.IndexOf("<title><![CDATA[", a + 16);
b = webxml.IndexOf("]]></title>", b + 11);
title1[i] = webxml.Substring(a + 16, b - a - 16);
c = webxml.IndexOf("<album_name><![CDATA[", c + 21);
d = webxml.IndexOf("]]></album_name>", d + 16);
album_name1[i] = webxml.Substring(c + 21, d - c - 21);
e1 = webxml.IndexOf("<artist>", e1 + 8);
f = webxml.IndexOf("</artist>", f + 9);
artist1[i] = webxml.Substring(e1 + 8, f - e1 - 8);
g = webxml.IndexOf("<location>", g + 10);
h = webxml.IndexOf("</location>", h + 11);
location1[i] = songuri.GetLocation(webxml.Substring(g + 10, h - g - 10));
j = webxml.IndexOf("<pic>", j + 5);
k = webxml.IndexOf("</pic>", k + 6);
string p = webxml.Substring(j + 5, k - j - 5);
pic1[i] = p.Replace("_1", "_2");
y = i;
}
catch (Exception)
{
break;
}
}
textBlock4.Text = "按播放键,播放";
buttonstart.IsEnabled = true;
buttondown.IsEnabled = true;
}
catch (Exception)
{
MessageBox.Show ("貌似网络不行~\\(≧▽≦)//~啦啦啦");
}
}
private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
try
{
ImageBrush back = new ImageBrush();
back.ImageSource = new BitmapImage(new Uri("Images/back.jpg", UriKind.Relative));
this.Background = back;
}
catch (Exception)
{
MessageBox.Show("找不到图back.jpg!");
this.Background = Brushes.SkyBlue;
}
}
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
this.Background = Brushes.Transparent;
}
private void mediaElementsong_MediaEnded(object sender, RoutedEventArgs e)
{
if (w==0)
{
nextSong();
}
}
private void mediaElementsong_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
textBlock4.Visibility = Visibility.Visible;
textBlock4.Text = "歌曲加载失败!!";
}
private void MenuItem2_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void MenuItem1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("作者:无限的天空1989" + '\n' + "联系方式:gaozhao0331@163.com" +
'\n' + "说明:本软件音乐资源使用《虾米网》,纯" + '\n' + "属个人娱乐作品,有不足出错的地方请见谅.");
}
}
}
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架