Öffnen eines Geräts
Bevor Sie ein Gerät verwenden, müssen Sie es mit dem Befehl öffnen (MCI_OPEN) initialisieren. Dieser Befehl lädt den Treiber in den Arbeitsspeicher (sofern er noch nicht geladen ist) und ruft die Geräte-ID ab, die Sie zum Identifizieren des Geräts in nachfolgenden MCI-Befehlen verwenden. Sie sollten den Rückgabewert der mciSendString - oder mciSendCommand-Funktion überprüfen, bevor Sie einen neuen Gerätebezeichner verwenden, um sicherzustellen, dass der Bezeichner gültig ist. (Sie können einen Gerätebezeichner auch mithilfe der Funktion mciGetDeviceID abrufen.)
Wie alle MCI-Befehlsmeldungen verfügt MCI_OPEN über eine zugeordnete Struktur. Diese Strukturen werden manchmal als Parameterblöcke bezeichnet. Die Standardstruktur für MCI_OPEN ist MCI_OPEN_PARMS. Bestimmte Geräte (z. B. Wellenform und Überlagerung) verfügen über erweiterte Strukturen (z. B. MCI_WAVE_OPEN_PARMS und MCI_OVLY_OPEN_PARMS), um zusätzliche optionale Parameter zu berücksichtigen. Sofern Sie diese zusätzlichen Parameter nicht verwenden müssen, können Sie die MCI_OPEN_PARMS-Struktur mit jedem MCI-Gerät verwenden.
Die Anzahl der Geräte, die geöffnet werden können, ist nur durch die Menge des verfügbaren Arbeitsspeichers begrenzt.
Verwenden eines Alias
Wenn Sie ein Gerät öffnen, können Sie das Flag "Alias" verwenden, um einen Gerätebezeichner für das Gerät anzugeben. Mit diesem Flag können Sie einen kurzen Gerätebezeichner für zusammengesetzte Geräte mit langen Dateinamen zuweisen und mehrere Instanzen derselben Datei oder desselben Geräts öffnen.
Der folgende Befehl weist beispielsweise den Gerätebezeichner "birdcall" dem langwierigen Dateinamen C:\NABIRDS\SOUNDS\MOCKMTNG zu. WAV:
mciSendString(
"open c:\nabirds\sounds\mockmtng.wav type waveaudio alias birdcall",
lpszReturnString, lstrlen(lpszReturnString), NULL);
In der Command-Message-Schnittstelle geben Sie einen Alias an, indem Sie den lpstrAlias-Member der MCI_OPEN_PARMS-Struktur verwenden.
Angeben eines Gerätetyps
Wenn Sie ein Gerät öffnen, können Sie das Flag "type" verwenden, um auf einen Gerätetyp und nicht auf einen bestimmten Gerätetreiber zu verweisen. Im folgenden Beispiel wird die Waveform-Audiodatei C:\WINDOWS\CHIMES geöffnet. WAV (mit dem Flag "type", um den Waveaudio-Gerätetyp anzugeben) und weist den Alias "chimes" zu:
mciSendString(
"open c:\windows\chimes.wav type waveaudio alias chimes",
lpszReturnString, lstrlen(lpszReturnString), NULL);
In der Befehlsnachrichtenschnittstelle wird die Funktionalität des Flags "type" vom lpstrDeviceType-Element der MCI_OPEN_PARMS-Struktur bereitgestellt.
Einfache und zusammengesetzte Geräte
MCI klassifiziert Gerätetreiber als zusammengesetzt oder einfach. Treiber für Verbundgeräte benötigen den Namen einer Datendatei für die Wiedergabe. Treiber für einfache Geräte nicht.
Zu den einfachen Geräten gehören cdaudio - und videodisc-Geräte . Es gibt zwei Möglichkeiten, einfache Geräte zu öffnen:
Geben Sie einen Zeiger auf eine null-endende Zeichenfolge an, die den Gerätenamen aus der Registrierung oder die SYSTEM.INI-Datei enthält.
Beispielsweise können Sie ein videoDisc-Gerät mit dem folgenden Befehl öffnen:
mciSendString("open videodisc", lpszReturnString,
lstrlen(lpszReturnString), NULL);
In diesem Fall ist "videodisc" der Gerätename aus der Registrierung oder dem Abschnitt [mci] von SYSTEM.INI.
- Geben Sie den tatsächlichen Namen des Gerätetreibers an. Wenn Sie jedoch ein Gerät mit dem Gerätetreiberdateinamen öffnen, wird die Anwendung gerätespezifisch und kann verhindern, dass die Anwendung ausgeführt wird, wenn sich die Systemkonfiguration ändert. Wenn Sie einen Dateinamen verwenden, müssen Sie nicht den vollständigen Pfad oder die Dateinamenerweiterung angeben. MCI geht davon aus, dass sich Treiber in einem Systemverzeichnis befinden und über verfügen. DRV-Dateinamenerweiterung.
Verbundgeräte umfassen Waveaudio - und Sequencergeräte . Die Daten für ein zusammengesetztes Gerät werden manchmal als Geräteelement bezeichnet. Dieses Dokument bezieht sich jedoch im Allgemeinen auf diese Daten als Datei, auch wenn die Daten in einigen Fällen möglicherweise nicht als Datei gespeichert werden.
Es gibt drei Möglichkeiten, ein zusammengesetztes Gerät zu öffnen:
- Geben Sie nur den Gerätenamen an. Auf diese Weise können Sie ein zusammengesetztes Gerät öffnen, ohne einen Dateinamen zuzuordnen. Die meisten zusammengesetzten Geräte verarbeiten nur die Befehle "Capability " (MCI_GETDEVCAPS) und "Close " (MCI_CLOSE), wenn sie auf diese Weise geöffnet werden.
- Geben Sie nur den Dateinamen an. Der Gerätename wird aus den Zuordnungen in der Registrierung bestimmt.
- Geben Sie den Dateinamen und den Gerätenamen an. MCI ignoriert die Einträge in der Registrierung und öffnet den angegebenen Gerätenamen.
Um eine Datendatei einem bestimmten Gerät zuzuordnen, können Sie den Dateinamen und den Gerätenamen angeben. Mit dem folgenden Befehl wird beispielsweise das waveaudio-Gerät mit dem Dateinamen MYVOICE geöffnet. SND:
mciSendString("open myvoice.snd type waveaudio", lpszReturnString,
lstrlen(lpszReturnString), NULL);
In der Befehlszeichenfolgenschnittstelle können Sie auch die Gerätenamensspezifikation abkürten, indem Sie das alternative Ausrufezeichenformat verwenden, wie mit dem Open-Befehl dokumentiert.
Öffnen eines Geräts mithilfe der Dateinamenerweiterung
Wenn der Befehl open (MCI_OPEN) nur den Dateinamen angibt, verwendet MCI die Dateinamenerweiterung, um das entsprechende Gerät aus der Liste in der Registrierung oder im Abschnitt [mci extensions] der SYSTEM.INI-Datei auszuwählen. Die Einträge im Abschnitt [mci extensions] verwenden das folgende Format:
= filename_extension device_name
MCI verwendet implizit device_name , wenn die Erweiterung gefunden wird und wenn im Open-Befehl kein Gerätename angegeben wurde.
Das folgende Beispiel zeigt einen typischen Abschnitt [mci extensions]:
[mci extensions]
wav=waveaudio
mid=sequencer
rmi=sequencer
Mithilfe dieser Definitionen öffnet MCI das waveaudio-Gerät , wenn der folgende Befehl ausgegeben wird:
mciSendString("open train.wav", lpszReturnString,
lstrlen(lpszReturnString), NULL);
Neue Datendateien
Um eine neue Datendatei zu erstellen, geben Sie einfach einen leeren Dateinamen an. MCI speichert eine neue Datei erst, wenn Sie sie mit dem Befehl speichern (MCI_SAVE) speichern. Beim Erstellen einer neuen Datei müssen Sie einen Gerätealias mit dem Befehl open (MCI_OPEN) einschließen.
Im folgenden Beispiel wird eine neue waveaudio-Datei geöffnet, die Aufzeichnung gestartet und beendet. Anschließend wird die Datei gespeichert und geschlossen:
mciSendString("open new type waveaudio alias capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("record capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("stop capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("save capture orca.wav", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("close capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
Sharable-Geräte
Das Flag "sharable" (MCI_OPEN_SHAREABLE) des befehls "open" (MCI_OPEN) ermöglicht es mehreren Anwendungen, gleichzeitig auf dasselbe Gerät (oder dieselbe Datei) und dasselbe Gerät instance zuzugreifen. Wenn Ihre Anwendung ein Gerät oder eine Datei als Sharable öffnet, können auch andere Anwendungen darauf zugreifen, indem sie es als teilbar öffnen. Das freigegebene Gerät oder die freigegebene Datei gibt jeder Anwendung die Möglichkeit, die Parameter für den Betriebszustand zu ändern. Jedes Mal, wenn ein Gerät oder eine Datei als Sharable geöffnet wird, gibt MCI einen eindeutigen Gerätebezeichner zurück, obwohl die Bezeichner auf dieselbe instance verweisen.
Wenn Ihre Anwendung ein Gerät oder eine Datei öffnet, ohne anzugeben, dass es teilbar ist, kann keine andere Anwendung darauf zugreifen, bis Ihre Anwendung es schließt. Wenn ein Gerät nur eine geöffnete instance unterstützt, schlägt der Open-Befehl fehl, wenn Sie das Sharable-Flag angeben.
Wenn Ihre Anwendung ein Gerät öffnet und angibt, dass es teilbar ist, sollte Ihre Anwendung keine Annahmen über den Zustand dieses Geräts treffen. Möglicherweise muss Ihre Anwendung Änderungen kompensieren, die von anderen Anwendungen vorgenommen wurden, die auf das Gerät zugreifen.
Die meisten Verbunddateien können nicht freigegeben werden. Sie können jedoch mehrere Dateien öffnen, oder Sie können eine einzelne Datei mehrmals öffnen. Wenn Sie eine einzelne Datei mehrmals öffnen, erstellt MCI für jede Datei einen unabhängigen instance, wobei jede instance über einen eindeutigen status verfügt.
Wenn Sie mehrere Instanzen einer Datei öffnen, müssen Sie jeder datei einen eindeutigen Gerätebezeichner zuweisen. Sie können einen Alias verwenden, wie im folgenden Abschnitt beschrieben, um jeder Datei einen eindeutigen Namen zuzuweisen.