Gewusst wie: Verwenden eines Plattformaufrufs zum Wiedergeben einer Wavedatei (C#-Programmierhandbuch)How to: Use Platform Invoke to Play a Wave File (C# Programming Guide)

In folgendem C#-Codebeispiel wird die Verwendung von Plattformaufrufdiensten zum Abspielen einer Audiodatei im Waveformat im Windows-Betriebssystem veranschaulicht.The following C# code example illustrates how to use platform invoke services to play a wave sound file on the Windows operating system.

BeispielExample

In diesem Beispielcode wird DllImport verwendet, um den Einstiegspunkt der PlaySound-Methode von winmm.dll als Form1 PlaySound() zu importieren.This example code uses DllImport to import winmm.dll's PlaySound method entry point as Form1 PlaySound(). Das Beispiel hat ein einfaches Windows-Formular mit einer Schaltfläche.The example has a simple Windows Form with a button. Wenn Sie auf die Schaltfläche klicken, öffnet sich das Windows-Standarddialogfeld OpenFileDialog, von wo aus Sie eine Datei zur Wiedergabe öffnen können.Clicking the button opens a standard windows OpenFileDialog dialog box so that you can open a file to play. Wenn Sie eine Wavedatei auswählen, wird diese mit der PlaySound()-Methode der Assemblymethode „wimm.dll“ wiedergegeben.When a wave file is selected, it is played by using the PlaySound() method of the winmm.DLL assembly method. Weitere Informationen zur PlaySound-Methode von „winmm.dll“ finden Sie unter Using the PlaySound function with Waveform-Audio Files (Verwenden der Funktion „PlaySound“ mit WAVE-Audiodateien).For more information about winmm.dll's PlaySound method, see Using the PlaySound function with Waveform-Audio Files. Suchen Sie nach einer Datei und wählen Sie eine aus, die über eine WAV-Erweiterung verfügt, und klicken Sie anschließend auf Öffnen, um die WAVE-Datei mit einem Plattformaufruf wiederzugeben.Browse and select a file that has a .wav extension, and then click Open to play the wave file by using platform invoke. Der vollständige Pfad der ausgewählten Datei wird in einem Textfeld angezeigt.A text box shows the full path of the file selected.

Das Dialogfeld Open Files (Dateien öffnen) wird so gefiltert, dass es nur Dateien mit WAV-Erweiterung anzeigt werden. Dazu werden folgende Filtereinstellungen verwendet:The Open Files dialog box is filtered to show only files that have a .wav extension through the filter settings:

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 CodesCompiling the Code

Kompilieren des CodesTo compile the code

  1. Erstellen Sie in Visual Studio ein neuen Windows-Anwendungsprojekt mit C# und nennen Sie es WinSound.Create a new C# Windows Application project in Visual Studio and name it WinSound.

  2. Kopieren Sie den oben stehenden Code, und fügen Sie diesen über dem Inhalt der Form1.cs-Datei ein.Copy the code above, and paste it over the contents of the Form1.cs file.

  3. Kopieren Sie folgenden Code und fügen Sie ihn in der Form1.Designer.cs-Datei in der InitializeComponent()-Methode ein, und zwar immer nach vorhandenem Code.Copy the following code, and paste it in the Form1.Designer.cs file, in the InitializeComponent() method, after any existing code.

    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 diesen aus.Compile and run the code.

.NET Framework-Sicherheit.NET Framework Security

Weitere Informationen finden Sie unter .NET Framework-Sicherheit.For more information, see .NET Framework Security.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Überblick über die InteroperabilitätInteroperability Overview
Genauere Betrachtung von PlattformaufrufenA Closer Look at Platform Invoke
Marshallen von Daten mit PlattformaufrufMarshaling Data with Platform Invoke