Gewusst wie: Verwenden eines Plattformaufrufs zum Wiedergeben einer Wavedatei (C#-Programmierhandbuch)

Das folgende C#-Codebeispiel veranschaulicht die Verwendung von Plattformaufrufdiensten zum Wiedergeben einer Wavedatei in Windows.

Beispiel

In diesem Beispielcode wird DllImport verwendet, um den Einstiegspunkt der PlaySound-Methode von winmm.dll als Form1 PlaySound() zu importieren. Das Beispiel verfügt über ein einfaches Windows Form mit einer Schaltfläche. Durch Klicken auf die Schaltfläche wird das Windows-Standarddialogfeld OpenFileDialog geöffnet, mit dem Sie die Datei öffnen können, die wiedergegeben werden soll. Die ausgewählte Wavedatei wird dann mit der PlaySound()-Methode der winmm.DLL-Assemblymethode wiedergegeben. Weitere Informationen zur PlaySound-Methode von winmm.dll finden Sie unter Using the PlaySound function with Waveform-Audio Files. Navigieren Sie zu einer WAV-Datei, und wählen Sie sie aus. Klicken Sie anschließend auf Öffnen, um die Wavedatei unter Verwendung des Plattformaufrufs wiederzugeben. Der vollständige Pfad der ausgewählten Datei wird in einem Textfeld angezeigt.

Im Dialogfeld Geöffnete Dateien wird ein Filter angewendet, sodass nur Dateien mit der Erweiterung .wav angezeigt werden:

dialog1.Filter = "Wav Files (*.wav)|*.wav";
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WinSound
{
    public partial class Form1 : Form
    {
        private TextBox textBox1;
        private Button button1;

        public Form1()  //constructor
        {
            InitializeComponent();
        }

        [System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
        private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);

        [System.Flags] 
        public enum PlaySoundFlags : int
        {
            SND_SYNC = 0x0000,
            SND_ASYNC = 0x0001, 
            SND_NODEFAULT = 0x0002, 
            SND_LOOP = 0x0008, 
            SND_NOSTOP = 0x0010,
            SND_NOWAIT = 0x00002000, 
            SND_FILENAME = 0x00020000, 
            SND_RESOURCE = 0x00040004 
        }

        private void button1_Click (object sender, System.EventArgs e)
        {
            OpenFileDialog dialog1 = new OpenFileDialog(); 

            dialog1.Title = "Browse to find sound file to play";
            dialog1.InitialDirectory = @"c:\";
            dialog1.Filter = "Wav Files (*.wav)|*.wav";
            dialog1.FilterIndex = 2;
            dialog1.RestoreDirectory = true;

            if(dialog1.ShowDialog() == DialogResult.OK) 
            { 
                textBox1.Text = dialog1.FileName;
                PlaySound (dialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_SYNC);
            } 
        }
    }
}

Kompilieren des Codes

So kompilieren Sie den Code

  1. Erstellen Sie in Visual Studio ein neues C#-Windows-Anwendungsprojekt, und nennen Sie es WinSound.

  2. Kopieren Sie den obigen Code, und fügen Sie ihn statt des bisherigen Inhalts in die Datei Form1.cs ein.

  3. Kopieren Sie den folgenden Code, und fügen Sie ihn in die Datei Form1.Designer.cs in der InitializeComponent()-Methode nach dem vorhandenen Code ein.

    this.button1 = new System.Windows.Forms.Button();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.SuspendLayout();
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(192, 40);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(88, 24);
    this.button1.TabIndex = 0;
    this.button1.Text = "Browse";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // textBox1
    // 
    this.textBox1.Location = new System.Drawing.Point(8, 40);
    this.textBox1.Name = "textBox1";
    this.textBox1.Size = new System.Drawing.Size(168, 20);
    this.textBox1.TabIndex = 1;
    this.textBox1.Text = "FIle path";
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Controls.Add(this.textBox1);
    this.Controls.Add(this.button1);
    this.Name = "Form1";
    this.Text = "Platform Invoke WinSound C#";
    this.ResumeLayout(false);
    this.PerformLayout();
    
  4. Kompilieren Sie den Code, und führen Sie ihn aus.

Sicherheit

Informationen finden Sie unter .NET Framework Security.

Siehe auch

Referenz

Überblick über die Interoperabilität (C#-Programmierhandbuch)

Überblick über die Interoperabilität (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch

Genauere Betrachtung von Plattformaufrufen

Weitere Ressourcen

Marshallen von Daten mit Plattformaufruf