共用方式為


midiOutMessage 函數 (mmeapi.h)

midiOutMessage 函式會傳送訊息至 MIDI 裝置驅動程式。 此功能僅用於 MIDI API 不支援的驅動程式特定訊息。

語法

MMRESULT midiOutMessage(
  HMIDIOUT  hmo,
  UINT      uMsg,
  DWORD_PTR dw1,
  DWORD_PTR dw2
);

參數

hmo

接收訊息之 MIDI 裝置的識別碼。 您必須將裝置 ID 轉換至 HMIDIOUT 控點類型。 如果您提供控制碼而非裝置識別碼,函式會失敗並傳回MMSYSERR_NOSUPPORT錯誤碼。

uMsg

要傳送的訊息。

dw1

Message 參數。

dw2

Message 參數。

返回值

傳回音訊裝置驅動程式所傳回的值。

備註

訊息會DRV_QUERYDEVICEINTERFACE查詢 waveInwaveOutmidiIn、midiOut混音器裝置的裝置介面名稱。

針對 DRV_QUERYDEVICEINTERFACEdwParam1 是呼叫端配置緩衝區的指標,函式會將包含裝置介面名稱的 Null 結尾 Unicode 字串寫入其中。 如果裝置沒有裝置介面,則字串長度為零。

針對 DRV_QUERYDEVICEINTERFACEdwParam2 會指定緩衝區大小,以位元組為單位。 這是函數的輸入參數。 呼叫端應該指定大於或等於 DRV_QUERYDEVICEINTERFACESIZE 訊息所擷取的緩衝區大小的大小。

Windows Me 和 Windows 2000 和更新版本支援DRV_QUERYDEVICEINTERFACE訊息。 此訊息僅適用於 waveInMessagewaveOutMessagemidiInMessagemidiOutMessagemixerMessage 函式。 系統會攔截此訊息,並傳回適當的值,而不將訊息傳送至裝置驅動程式。 如需系統截獲 xxxMessage 函式的一般資訊,請參閱 System-Intercepted 裝置訊息

下列兩個訊息常數會一起使用,以取得裝置介面名稱:

  • DRV_QUERYDEVICEINTERFACESIZE
  • DRV_QUERYDEVICEINTERFACE
第一則訊息會取得保留包含裝置介面名稱的字串所需的緩衝區大小 (以位元組為單位)。 第二則訊息會在所需大小的緩衝區中擷取名稱字串。

如需詳細資訊,請參閱 取得裝置介面名稱

訊息會 DRV_QUERYDEVICEINTERFACESIZE 查詢保留裝置介面名稱所需的緩衝區大小。

針對 DRV_QUERYDEVICEINTERFACESIZEdwParam1 是緩衝區大小的指標。 此參數指向 ULONG 變數,函式會將所需的緩衝區大小寫入其中,以位元組為單位。 大小包括名稱字串終止 Null 的儲存空間。 如果裝置識別碼識別沒有裝置介面的裝置,則大小為零。

對於 DRV_QUERYDEVICEINTERFACESIZEdwParam2 未使用。 將此參數設定為零。

此訊息僅適用於 waveInMessagewaveOutMessagemidiInMessagemidiOutMessagemixerMessage 函式。 系統會攔截此訊息,並傳回適當的值,而不將訊息傳送至裝置驅動程式。 如需系統截獲 xxxMessage 函式的一般資訊,請參閱 System-Intercepted 裝置訊息

此訊息擷取的緩衝區大小會以位元組計數表示。 它指定保留包含裝置介面名稱之空值結尾 Unicode 字串所需的緩衝區大小。 呼叫端會配置指定大小的緩衝區,並使用 DRV_QUERYDEVICEINTERFACE 訊息來擷取裝置介面名稱字串。

如需詳細資訊,請參閱 取得裝置介面名稱

訊息會 DRV_QUERYDEVNODE 查詢隨插即用管理員指派給裝置的 開發節點 號碼。

針對 DRV_QUERYDEVNODEdwParam1 是呼叫端配置的 DWORD 變數指標,函式會將 devnode 號碼寫入其中。 如果未將 devnode 指派給裝置,函式會將此變數設定為零。

對於 DRV_QUERYDEVNODEdwParam2 未使用。 將此參數設定為零。

在 Windows 2000 和更新版本中,訊息一律會傳回MMSYSERR_NOTSUPPORTED。 此訊息僅適用於 waveInMessagewaveOutMessagemidiInMessagemidiOutMessagemixerMessage 函式。 系統會攔截此訊息,並傳回適當的值,而不將訊息傳送至裝置驅動程式。 如需系統截獲 xxxMessage 函式的一般資訊,請參閱 System-Intercepted 裝置訊息

訊息會 DRV_QUERYMAPPABLE 查詢對應程式是否可以使用指定的裝置。

針對 DRV_QUERYMAPPABLEdwParam1 未使用。 將此參數設定為零。

對於 DRV_QUERYMAPPABLEdwParam2 未使用。 將此參數設定為零。

此訊息僅對 waveInMessagewaveOutMessagemidiInMessagemidiOutMessagemixerMessageauxOutMessage 函數有效。 系統會攔截此訊息,並傳回適當的值,而不將訊息傳送至裝置驅動程式。 如需系統截獲 xxxMessage 函式的一般資訊,請參閱 System-Intercepted 裝置訊息

當應用程式開啟對映程式而不是特定音訊裝置時,系統會在應用程式與可用裝置之間插入對映程式。 映射器通過將應用程序的需求映射到可用設備之一來選擇適當的設備。 如需對應程式的詳細資訊,請參閱 Microsoft Windows SDK 檔。

DRVM_MAPPER_CONSOLEVOICECOM_GET 訊息會擷取偏好語音通訊裝置的裝置識別碼。

針對 DRVM_MAPPER_CONSOLEVOICECOM_GETdwParam1 是裝置標識碼的指標。 此參數指向 DWORD 變數,函式會將目前慣用語音通訊裝置的裝置識別碼寫入其中。 如果沒有符合慣用語音通訊裝置資格的裝置,則函式會寫入值 (-1)。

針對 DRVM_MAPPER_CONSOLEVOICECOM_GETdwParam2 是狀態旗標的指標。 此參數指向函式將裝置狀態旗標寫入的 DWORD 變數。 目前只定義一個旗標位:DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY。

此訊息僅適用於 waveInMessagewaveOutMessage 函式。 當呼叫端使用DRVM_MAPPER_CONSOLEVOICECOM_GET訊息呼叫這兩個函式時,呼叫端必須將裝置識別碼指定為WAVE_MAPPER,然後將此值轉換成適當的控制碼類型。 針對 waveInMessagewaveOutMessagemidiInMessagemidiOutMessagemixerMessage 函式,呼叫端必須分別將裝置識別碼轉換成 HWAVEIN、HWAVEOUT、HMIDIIN、HMIDIOUT 或 HMIXER 類型的控制碼。 請注意,如果呼叫端提供有效的控制碼,而不是此參數的裝置識別碼,則函式會失敗,並傳回錯誤碼 MMSYSERR_NOSUPPORT。

系統會攔截此訊息,並傳回適當的值,而不將訊息傳送至裝置驅動程式。 如需系統截獲 xxxMessage 函式的一般資訊,請參閱 System-Intercepted 裝置訊息

此訊息提供一種方法來判斷哪個裝置特別偏好用於語音通訊,而 DRVM_MAPPER_PREFERRED_GET 訊息會決定哪個裝置是所有其他音訊功能的偏好。

例如,語音通訊的慣用 waveOut 裝置可能是耳機中的耳機,但所有其他音訊功能的慣用 waveOut 裝置可能是一組立體聲喇叭。

當 DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY 旗標位設定在 dwParam2 所指向的 DWORD 位置時, waveInwaveOut API 只會使用目前慣用的語音通訊裝置,而且如果慣用裝置無法使用,則不會搜尋其他可用的裝置。 waveInMessagewaveOutMessage 呼叫所輸出的旗標會套用至 waveInwaveOut API 的慣用語音通訊裝置,不論呼叫是對 waveInMessagewaveOutMessage 進行。 如需詳細資訊,請參閱 偏好 Voice-Communications 裝置 ID

DRVM_MAPPER_PREFERRED_GET 訊息會擷取慣用音訊裝置的裝置識別碼。

針對 DRVM_MAPPER_PREFERRED_GETdwParam1 是裝置標識碼的指標。 此參數指向 DWORD 變數,函式會將目前慣用裝置的裝置識別碼寫入其中。 如果沒有符合慣用裝置資格的裝置可用,則函式會寫入值 (-1)。

針對 DRVM_MAPPER_PREFERRED_GETdwParam2 是狀態旗標的指標。 此參數指向函式將裝置狀態旗標寫入的 DWORD 變數。 目前只定義一個旗標位 (僅適用於 waveInMessagewaveOutMessage 呼叫): DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY。

此訊息僅適用於 waveInMessagewaveOutMessagemidiOutMessage 函式。 當呼叫端使用DRVM_MAPPER_PREFERRED_GET訊息呼叫這些函式時,呼叫端必須先將裝置識別碼指定為 WAVE_MAPPER ( waveInMessagewaveOutMessage) 或 MIDI_MAPPER ( midiOutMessage) ,然後將此值轉換成適當的控制碼類型。 針對 waveInMessagewaveOutMessagemidiOutMessage 函式,呼叫端必須分別將裝置識別碼轉換至控制碼類型 HWAVEIN、HWAVEOUT 或 HMIDIOUT。 請注意,如果呼叫端提供有效的控制碼,而不是此參數的裝置識別碼,則函式會失敗,並傳回錯誤碼 MMSYSERR_NOSUPPORT。

系統會攔截此訊息,並傳回適當的值,而不將訊息傳送至裝置驅動程式。 如需系統截獲 xxxMessage 函式的一般資訊,請參閱 System-Intercepted 裝置訊息

此訊息提供一種方法,可判斷一般音訊功能的偏好裝置,與 DRVM_MAPPER_CONSOLEVOICECOM_GET 訊息相反,後者會決定語音通訊特別偏好的裝置。

當 DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY 旗標位設定在 dwParam2 所指向的 DWORD 位置時, waveInwaveOut API 只會使用目前慣用的裝置,而且如果慣用裝置無法使用,則不會搜尋其他可用的裝置。 請注意, midiOutMessage 函式不會輸出此旗標, 因為 midiOut API 一律只使用偏好的裝置。 waveInMessagewaveOutMessage 呼叫所輸出的旗標會套用至 waveInwaveOut API 的慣用裝置,不論呼叫是對 waveInMessagewaveOutMessage 進行。

xxx訊息函式會接受此值來取代有效的裝置控制碼,以允許應用程式判斷預設裝置標識碼,而不需要先開啟裝置。 如需詳細資訊,請參閱 存取慣用裝置 ID

需求

Requirement 價值觀
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
Header mmeapi.h (包括 Windows.h)
Library Winmm.lib 網站
DLL Winmm.dll

另請參閱

MIDI 功能