共用方式為


開啟裝置

[與此頁面相關聯的功能 MCI是舊版功能。 MediaPlayer已取代它。 MediaPlayer 已針對 Windows 10 和 Windows 11 優化。 Microsoft強烈建議新程式代碼盡可能使用 MediaPlayer,而不是 MCI。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

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

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

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

使用別名

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

例如,下列命令會將裝置標識碼 「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);

在命令訊息介面中,lpstrDeviceTypeMCI_OPEN_PARMS 結構的成員會提供 “type” 旗標的功能。

簡單和複合裝置

MCI 將裝置驅動器分類為 複合簡單。 複合裝置的驅動程式需要數據檔的名稱以供播放;簡單裝置的驅動程式不會。

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

  • 指定一個指向 null 終止字串的指標,該字串包含來自登錄或 SYSTEM.INI 檔案的裝置名稱。

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

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

在此情況下,“videodisc” 是 SYSTEM.INI 登記表或 [mci] 區段的設備名稱。

  • 指定設備驅動器的實際名稱。 然而,使用裝置驅動程式檔案名稱開啟裝置會讓應用程式與特定裝置綁定,並可能導致應用程式在系統設定變更時無法執行。 如果您使用檔名,則不需要指定完整路徑或擴展名;MCI 假設驅動程式位於系統目錄中,且具有 。DRV 擴展名。

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

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

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

若要將資料檔與特定裝置產生關聯,您可以指定檔名和裝置名稱。 例如,下列命令會使用檔名 MYVOICE.SND 開啟 waveaudio 音頻裝置。

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

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

使用副檔名開啟裝置

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

filename_extension = device_name

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

下列範例顯示典型的 [mci 延伸模組] 區段:

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

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

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

新增資料檔

若要建立新的資料檔,只需指定空白檔名即可。 MCI 不會儲存新的檔案,直到您使用 saveMCI_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 會為每個實例建立獨立的實例,且每個實例都有唯一的作業狀態。

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