Condividi tramite


Apertura di un dispositivo

Prima di usare un dispositivo, è necessario inizializzarlo usando il comando open (MCI_OPEN). Questo comando carica il driver in memoria (se non è già caricato) e recupera l'identificatore del dispositivo che verrà usato per identificare il dispositivo nei comandi MCI successivi. È necessario controllare il valore restituito della funzione mciSendString o mciSendCommand prima di usare un nuovo identificatore del dispositivo per assicurarsi che l'identificatore sia valido. È anche possibile recuperare un identificatore di dispositivo usando la funzione mciGetDeviceID .

Analogamente a tutti i messaggi dei comandi MCI, MCI_OPEN ha una struttura associata. Queste strutture sono talvolta denominate blocchi di parametri. La struttura predefinita per MCI_OPEN è MCI_OPEN_PARMS. Alcuni dispositivi (ad esempio la forma d'onda e la sovrimpressione) hanno strutture estese (ad esempio MCI_WAVE_OPEN_PARMS e MCI_OVLY_OPEN_PARMS) per supportare parametri facoltativi aggiuntivi. A meno che non sia necessario usare questi parametri aggiuntivi, è possibile usare la struttura MCI_OPEN_PARMS con qualsiasi dispositivo MCI.

Il numero di dispositivi che è possibile avere aperto è limitato solo dalla quantità di memoria disponibile.

Uso di un alias

Quando si apre un dispositivo, è possibile usare il flag "alias" per specificare un identificatore di dispositivo per il dispositivo. Questo flag consente di assegnare un identificatore di dispositivo breve per i dispositivi composti con nomi di file lunghi e consente di aprire più istanze dello stesso file o dispositivo.

Ad esempio, il comando seguente assegna l'identificatore del dispositivo "birdcall" al nome file lungo C:\NABIRDS\SOUNDS\MOCKMTNG. WAV:

mciSendString(
    "open c:\nabirds\sounds\mockmtng.wav type waveaudio alias birdcall", 
    lpszReturnString, lstrlen(lpszReturnString), NULL);

Nell'interfaccia del messaggio di comando specificare un alias usando il membro lpstrAlias della struttura MCI_OPEN_PARMS .

Specifica di un tipo di dispositivo

Quando si apre un dispositivo, è possibile usare il flag "type" per fare riferimento a un tipo di dispositivo, anziché a un driver di dispositivo specifico. Nell'esempio seguente viene aperto il file waveform-audio C:\WINDOWS\CHIMES. WAV (usando il flag "type" per specificare il tipo di dispositivo waveaudio ) e assegna l'alias "chimes":

mciSendString(
    "open c:\windows\chimes.wav type waveaudio alias chimes", 
    lpszReturnString, lstrlen(lpszReturnString), NULL);

Nell'interfaccia del messaggio di comando, la funzionalità del flag "type" viene fornita dal membro lpstrDeviceType della struttura MCI_OPEN_PARMS .

Dispositivi semplici e composti

MCI classifica i driver di dispositivo come composti o semplici. I driver per i dispositivi composti richiedono il nome di un file di dati per la riproduzione; i driver per i dispositivi semplici non lo fanno.

I dispositivi semplici includono dispositivi cdaudio e videodisc . Esistono due modi per aprire dispositivi semplici:

  • Specificare un puntatore a una stringa con terminazione Null contenente il nome del dispositivo dal Registro di sistema o dal file SYSTEM.INI.

    Ad esempio, è possibile aprire un dispositivo videodisc usando il comando seguente:

    mciSendString("open videodisc", lpszReturnString, 
        lstrlen(lpszReturnString), NULL);

In questo caso, "videodisc" è il nome del dispositivo dal Registro di sistema o dalla sezione [mci] di SYSTEM.INI.

  • Specificare il nome effettivo del driver di dispositivo. L'apertura di un dispositivo tramite il nome file del driver di dispositivo, tuttavia, rende l'applicazione specifica del dispositivo e può impedire l'esecuzione dell'applicazione se la configurazione del sistema cambia. Se si usa un nome file, non è necessario specificare il percorso completo o l'estensione del nome file; MCI presuppone che i driver si trovino in una directory di sistema e abbiano . Estensione del nome file DRV.

I dispositivi composti includono waveaudio e dispositivi sequencer . I dati per un dispositivo composto vengono talvolta chiamati elemento del dispositivo. Questo documento, tuttavia, in genere fa riferimento a questi dati come file, anche se in alcuni casi i dati potrebbero non essere archiviati come file.

Esistono tre modi per aprire un dispositivo composto:

  • Specificare solo il nome del dispositivo. In questo modo è possibile aprire un dispositivo composto senza associare un nome file. La maggior parte dei dispositivi composti elabora solo i comandi di funzionalità (MCI_GETDEVCAPS) e chiudi (MCI_CLOSE) quando vengono aperti in questo modo.
  • Specificare solo il nome file. Il nome del dispositivo viene determinato dalle associazioni nel Registro di sistema.
  • Specificare il nome file e il nome del dispositivo. MCI ignora le voci nel Registro di sistema e apre il nome del dispositivo specificato.

Per associare un file di dati a un dispositivo specifico, è possibile specificare il nome file e il nome del dispositivo. Ad esempio, il comando seguente apre il dispositivo waveaudio con il nome file MYVOICE. SND:

mciSendString("open myvoice.snd type waveaudio", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

Nell'interfaccia della stringa di comando è anche possibile abbreviare la specifica del nome del dispositivo usando il formato punto esclamativo alternativo, come documentato con il comando open .

Apertura di un dispositivo tramite l'estensione filename

Se il comando open (MCI_OPEN) specifica solo il nome file, MCI usa l'estensione del nome file per selezionare il dispositivo appropriato dall'elenco nel Registro di sistema o nella sezione [mci extensions] del file SYSTEM.INI. Le voci nella sezione [mci extensions] usano il formato seguente:

= filename_extension device_name

MCI usa in modo implicito device_name se l'estensione viene trovata e se nel comando aperto non è stato specificato un nome di dispositivo.

L'esempio seguente mostra una sezione tipica [estensioni mci]:

[mci extensions]
wav=waveaudio
mid=sequencer
rmi=sequencer

Usando queste definizioni, MCI apre il dispositivo waveaudio se viene eseguito il comando seguente:

mciSendString("open train.wav", lpszReturnString, 
    lstrlen(lpszReturnString), NULL);

Nuovi file di dati

Per creare un nuovo file di dati, è sufficiente specificare un nome file vuoto. MCI non salva un nuovo file finché non viene salvato usando il comando salva (MCI_SAVE). Quando si crea un nuovo file, è necessario includere un alias del dispositivo con il comando open (MCI_OPEN).

L'esempio seguente apre un nuovo file waveaudio , avvia e arresta la registrazione, quindi salva e chiude il file:

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);

Dispositivi condivisibili

Il flag "sharable" (MCI_OPEN_SHAREABLE) del comando open (MCI_OPEN) consente a più applicazioni di accedere contemporaneamente allo stesso dispositivo (o file) e all'istanza del dispositivo. Se l'applicazione apre un dispositivo o un file come condivisibile, altre applicazioni possono accedervi aprendolo come condivisibile. Il dispositivo o il file condiviso offre a ogni applicazione la possibilità di modificare i parametri che ne regolano lo stato operativo. Ogni volta che un dispositivo o un file viene aperto come condivisibile, MCI restituisce un identificatore di dispositivo univoco, anche se gli identificatori fanno riferimento alla stessa istanza.

Se l'applicazione apre un dispositivo o un file senza specificare che è condivisibile, nessun'altra applicazione può accedervi fino alla chiusura dell'applicazione. Inoltre, se un dispositivo supporta una sola istanza aperta, il comando open avrà esito negativo se si specifica il flag condivisibile.

Se l'applicazione apre un dispositivo e specifica che è condivisibile, l'applicazione non deve fare ipotesi sullo stato del dispositivo. L'applicazione potrebbe dover compensare le modifiche apportate da altre applicazioni che accedono al dispositivo.

La maggior parte dei file composti non è condivisibile; tuttavia, è possibile aprire più file oppure aprire un singolo file più volte. Se si apre un singolo file più volte, MCI crea un'istanza indipendente per ogni istanza, con ogni istanza con stato operativo univoco.

Se si aprono più istanze di un file, è necessario assegnare un identificatore di dispositivo univoco a ognuno di essi. È possibile usare un alias, come descritto nella sezione seguente, per assegnare un nome univoco per ogni file.