共用方式為


開啟裝置

使用裝置之前,您必須使用開啟的 (MCI_OPEN) 命令加以初始化。 此命令會將驅動程式載入記憶體 (如果尚未載入) ,並擷取您將用來在後續 MCI 命令中識別裝置的裝置識別碼。 您應該先檢查 mciSendStringmciSendCommand 函式的傳回值,再使用新的裝置識別碼以確保識別碼有效。 (您也可以使用 mciGetDeviceID 函式.) 擷取裝置識別碼

如同所有 MCI 命令訊息, MCI_OPEN 具有相關聯的結構。 這些結構有時稱為 參數區塊MCI_OPEN的預設結構是MCI_OPEN_PARMS。 某些裝置 (如 (,例如MCI_WAVE_OPEN_PARMS 和重 ) 等擴充結構 (,例如 MCI_WAVE_OPEN_PARMSMCI_OVLY_OPEN_PARMS) ,以容納額外的選擇性參數。 除非您需要使用這些額外的參數,否則您可以搭配任何 MCI 裝置使用 MCI_OPEN_PARMS 結構。

您可以開啟的裝置數目只會受限於可用的記憶體數量。

使用別名

當您開啟裝置時,您可以使用 「別名」旗標來指定裝置的裝置識別碼。 此旗標可讓您為具有冗長檔名的複合裝置指派簡短裝置識別碼,並可讓您開啟相同檔案或裝置的多個實例。

例如,下列命令會將裝置識別碼 「birdcall」 指派給冗長的檔案名 C:\NABIRDS\SOUNDS\MOCKMTNG。Wav:

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

在命令訊息介面中,您可以使用MCI_OPEN_PARMS結構的lpstrAlias成員來指定別名。

指定裝置類型

當您開啟裝置時,您可以使用「類型」旗標來參考裝置類型,而不是特定裝置驅動程式。 下列範例會開啟電壓音訊檔案 C:\WINDOWS\CHIMES。WAV (使用 「type」 旗標來指定 waveaudio 裝置類型) ,並指派別名 「chimes」:

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

在命令訊息介面中,「type」 旗標的功能是由MCI_OPEN_PARMS結構的lpstrDeviceType成員所提供。

簡單和複合裝置

MCI 會將設備磁碟機分類為 複合簡單。 複合裝置的驅動程式需要資料檔案的名稱以供播放;簡單裝置的驅動程式不會。

簡單裝置包括 cdaudiovideodisc 裝置。 有兩種方式可以開啟簡單的裝置:

  • 從登錄或SYSTEM.INI檔案指定包含裝置名稱之 Null 終止字串的指標。

    例如,您可以使用下列命令開啟 videodisc 裝置:

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

在此情況下,「videodisc」 是登錄中的裝置名稱,或SYSTEM.INI的 [mci] 區段。

  • 指定設備磁碟機的實際名稱。 不過,使用 device-driver 檔案名開啟裝置,讓應用程式裝置成為特定,而且如果系統組態變更,可能會防止應用程式執行。 如果您使用檔案名,則不需要指定完整路徑或副檔名;MCI 假設驅動程式位於系統目錄中,並具有 。DRV 副檔名。

複合裝置包括 waveaudiosequencer 裝置。 複合裝置的資料有時稱為 裝置元素。 不過,本檔通常會將此資料稱為檔案,不過在某些情況下,資料可能不會儲存為檔案。

有三種方式可以開啟複合裝置:

  • 只指定裝置名稱。 這可讓您開啟複合裝置,而不關聯檔案名。 大部分複合裝置只會處理 (MCI_GETDEVCAPS) 的功能,並在以這種方式開啟時關閉MCI_CLOSE) 命令 (。
  • 只指定檔案名。 裝置名稱是由登錄中的關聯所決定。
  • 指定檔案名和裝置名稱。 MCI 會忽略登錄中的專案,並開啟指定的裝置名稱。

若要建立資料檔案與特定裝置的關聯,您可以指定檔案名和裝置名稱。 例如,下列命令會以 MYVOICE 檔案名開啟 waveaudio 裝置。Snd:

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

在命令字串介面中,您也可以使用替代驚嘆號格式來縮寫裝置名稱規格,如 開啟 命令所述。

使用副檔名開啟裝置

如果開啟 (MCI_OPEN) 命令只指定檔案名,MCI 會使用檔案名副檔名,從SYSTEM.INI檔案的登錄或 [mci 副檔名] 區段中的清單選取適當的裝置。 [mci extensions] 區段中的專案會使用下列格式:

= filename_extensiondevice_name

如果找到擴充功能,且未在開啟的命令中指定裝置名稱,MCI 會隱含地使用device_name

下列範例顯示一般 [mci 延伸模組] 區段:

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

如果發出下列命令,MCI 就會使用這些定義來開啟 waveaudio 裝置:

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

新增資料檔案

若要建立新的資料檔案,只需指定空白檔案名即可。 MCI 不會儲存新檔案,除非您使用 儲存 (MCI_SAVE) 命令加以儲存。 建立新檔案時,您必須使用 開啟 的 (MCI_OPEN) 命令來包含裝置別名。

下列範例會開啟新的 waveaudio 檔案、啟動和停止錄製,然後儲存並關閉檔案:

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

可共用裝置

開啟 (MCI_OPEN) 命令的「可共用」 (MCI_OPEN_SHAREABLE) 旗標可讓多個應用程式同時存取相同的裝置 (或檔案) 和裝置實例。 如果您的應用程式將裝置或檔案開啟為可共用,其他應用程式也可以藉由將其開啟為可共用來存取它。 共用裝置或檔案可讓每個應用程式變更其操作狀態的參數。 每次將裝置或檔案開啟為可共用時,MCI 都會傳回唯一的裝置識別碼,即使識別碼參考相同的實例也一樣。

如果您的應用程式開啟裝置或檔案,但未指定其可共用,則其他應用程式將無法存取它,直到您的應用程式關閉為止。 此外,如果裝置只支援一個開啟的實例,如果您指定可共用旗標, 則開啟 的命令將會失敗。

如果您的應用程式開啟裝置並指定其可共用,則您的應用程式不應該對此裝置的狀態進行任何假設。 您的應用程式可能需要補償其他存取裝置的應用程式所做的變更。

大部分的複合檔案都無法共用;不過,您可以開啟多個檔案,也可以多次開啟單一檔案。 如果您多次開啟單一檔案,MCI 會為每個實例建立獨立的實例,且每個實例都有唯一的作業狀態。

如果您開啟檔案的多個實例,則必須為每個實例指派唯一的裝置識別碼。 您可以如下一節所述,使用別名來指派每個檔案的唯一名稱。