Musik wiedergeben
Da ich WPF verwende ist das total simpel: In der xaml-Datei habe ich einfach als Element (so wie z.B. ein Button) ein MediaElement:<MediaElement Height="10" Width ="10" LoadedBehavior="Manual" Name="mediaElement1" VerticalAlignment="Top" />
Das MediaElement ist unsichtbar. Um jetzt Musik abzuspielen geht man folgendermaßen vor:
mediaElement1.Source = new Uri(pathToMediaFile);
mediaElement1.Play();
Das war auch schon alles was man dazu sagen muss. Man kann sich jetzt noch an Events hängen, z.B. an mediaElement1_MediaEnded, sodass man weiß, wann die Wiedergabe aufgehört hat (um z.B. das nächste Lied zu starten).
Hotkeys
Anmerkung: Inzwischen benutze ich eine "bessere" Implementierung der Hotkeys, welche man hier nachlesen kann.Hotkeys zu verwenden ist recht einfach. Zuerst muss man ein paar Zeilen in das Programm einfügen:
[DllImport("User32.dll")]
private static extern bool RegisterHotKey(
[In] IntPtr hWnd,
[In] int id,
[In] uint fsModifiers,
[In] uint vk);
[DllImport("User32.dll")]
private static extern bool UnregisterHotKey(
[In] IntPtr hWnd,
[In] int id);
private HwndSource _source;
private const int HOTKEY_ID = 9000;
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var helper = new WindowInteropHelper(this);
_source = HwndSource.FromHwnd(helper.Handle);
_source.AddHook(HwndHook);
RegisterHotKey();
}
protected override void OnClosed(EventArgs e)
{
_source.RemoveHook(HwndHook);
_source = null;
UnregisterHotKey();
base.OnClosed(e);
}
private void UnregisterHotKey()
{
var helper = new WindowInteropHelper(this);
UnregisterHotKey(helper.Handle, HOTKEY_ID);
}
private IntPtr HwndHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
const int WM_HOTKEY = 0x0312;
switch (msg)
{
case WM_HOTKEY:
OnHotKeyPressed(wParam.ToInt32());
break;
}
return IntPtr.Zero;
}
Als nächstes habe ich die drei Hotkeys, welche ich benötige definiert:
private void RegisterHotKey()
{
var helper = new WindowInteropHelper(this);
const uint VK_RIGHT = 0x27;
const uint VK_LEFT = 0x25;
const uint VK_SPACE = 0x20;
const uint MOD_ALT = 0x0001;
const uint MOD_CTRL = 0x0002;
if (!RegisterHotKey(helper.Handle, HOTKEY_ID+2, MOD_CTRL + MOD_ALT, VK_RIGHT))
{
// handle error
}
if (!RegisterHotKey(helper.Handle, HOTKEY_ID+1, MOD_CTRL + MOD_ALT, VK_LEFT))
{
// handle error
}
if (!RegisterHotKey(helper.Handle, HOTKEY_ID, MOD_CTRL + MOD_ALT, VK_SPACE))
{
// handle error
}
}
Nun braucht es nur noch die Funktion, welche die gewünschten Aktionen ausführt, wenn man einen Hotkey drückt:
private void OnHotKeyPressed(int key)//9000 = space, 9001 = left, 9002 = right
{
//System.Console.Write("KeyPressed! {0}\n", key);
switch (key)
{
case 9000: if (playing) { pause(); } else { play(); }
break;
case 9001: back();
break;
case 9002: next();
break;
default:
break;
}
// do stuff
}
Was genau hier passiert ist auch relativ simpel zu erkennen und sollte selbsterklärend sein. Für die Hotkeys muss man nun weiter nichts mehr tun. Zu beachten ist jedoch, dass diese Hotkeys nur bei meinem Programm funktionieren, solange es offen ist. Würde ich also z.B. "AltGr" + "0" als Hotkey nehmen, so könnte ich kein } mehr schreiben, während das Programm läuft.
Keine Kommentare:
Kommentar veröffentlichen