devicetopology.h (IKsJackDescription 介面)
IKsJackDescription介面提供有關插孔或內部連接器的資訊,這些連接器提供音訊介面卡上裝置與外部或內部端點 (裝置之間的實體連線,例如麥克風或 CD 播放程式) 。 用戶端會呼叫IPart::Activate方法,並將參數refiid設定為REFIID IID_IKsJackDescription,以取得元件的IKsJackDescription介面參考。 只有在元件支援IKsJackDescription介面時,IPart::Activate的呼叫才會成功。 只有代表具有Physical_External或Physical_Internal連線類型的連接器的元件物件將支援這個介面。
大部分的 Windows 音訊介面卡驅動程式都支援 Windows 驅動程式模型 (WDM) ,並使用核心串流 (KS) 屬性來表示連接器中的硬體描述參數, (稱為 KS 針腳) 。 IKsJackDescription介面可讓您方便存取連接器至端點裝置的 KSPROPERTY_JACK_DESCRIPTION 屬性。 如需 KS 屬性和 KS 針腳的詳細資訊,請參閱 Windows DDK 檔。
繼承
IKsJackDescription介面繼承自IUnknown介面。 IKsJackDescription 也有下列類型的成員:
方法
IKsJackDescription介面具有這些方法。
IKsJackDescription::GetJackCount GetJackCount 方法會取得連線到音訊端點裝置所需的插孔數目。 |
IKsJackDescription::GetJackDescription GetJackDescription 方法會取得音訊插孔的描述。 |
備註
如果音訊端點裝置支援 IKsJackDescription 介面,Windows 多媒體控制台 Mmsys.cpl 會顯示插孔資訊。 若要檢視插孔資訊,請遵循下列步驟:
-
若要執行 Mmsys.cpl,請開啟 [命令提示字元] 視窗,然後輸入下列命令:
控制項 mmsys.cpl
或者,您也可以以滑鼠右鍵按一下通知區域中的喇叭圖示,其位於工作列右側,然後選取 [ 播放裝置 ] 或 [ 錄製裝置] 來執行 Mmsys.cpl。
- 開啟 [Mmsys.cpl] 視窗之後,請從播放裝置清單或錄製裝置清單中選取裝置,然後按一下 [ 內容]。
- 當屬性視窗開啟時,按一下 [ 一般]。 如果選取的屬性頁顯示裝置的插孔資訊,則裝置支援 IKsJackDescription 介面。 如果屬性頁顯示「沒有可用的插孔資訊」文字,則裝置不支援 介面。
//-----------------------------------------------------------
// Get the IKsJackDescription interface that describes the
// audio jack or jacks that the endpoint device plugs into.
//-----------------------------------------------------------
#define EXIT_ON_ERROR(hres) \
if (FAILED(hres)) { goto Exit; }
#define SAFE_RELEASE(punk) \
if ((punk) != NULL) \
{ (punk)->Release(); (punk) = NULL; }
HRESULT GetJackInfo(IMMDevice *pDevice,
IKsJackDescription **ppJackDesc)
{
HRESULT hr = S_OK;
IDeviceTopology *pDeviceTopology = NULL;
IConnector *pConnFrom = NULL;
IConnector *pConnTo = NULL;
IPart *pPart = NULL;
IKsJackDescription *pJackDesc = NULL;
if (NULL != ppJackDesc)
{
*ppJackDesc = NULL;
}
if (NULL == pDevice || NULL == ppJackDesc)
{
return E_POINTER;
}
// Get the endpoint device's IDeviceTopology interface.
hr = pDevice->Activate(__uuidof(IDeviceTopology), CLSCTX_ALL,
NULL, (void**)&pDeviceTopology);
EXIT_ON_ERROR(hr)
// The device topology for an endpoint device always
// contains just one connector (connector number 0).
hr = pDeviceTopology->GetConnector(0, &pConnFrom);
EXIT_ON_ERROR(hr)
// Step across the connection to the jack on the adapter.
hr = pConnFrom->GetConnectedTo(&pConnTo);
if (HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) == hr)
{
// The adapter device is not currently active.
hr = E_NOINTERFACE;
}
EXIT_ON_ERROR(hr)
// Get the connector's IPart interface.
hr = pConnTo->QueryInterface(__uuidof(IPart), (void**)&pPart);
EXIT_ON_ERROR(hr)
// Activate the connector's IKsJackDescription interface.
hr = pPart->Activate(CLSCTX_INPROC_SERVER,
__uuidof(IKsJackDescription), (void**)&pJackDesc);
EXIT_ON_ERROR(hr)
*ppJackDesc = pJackDesc;
Exit:
SAFE_RELEASE(pDeviceTopology)
SAFE_RELEASE(pConnFrom)
SAFE_RELEASE(pConnTo)
SAFE_RELEASE(pPart)
return hr;
}
在上述程式碼範例中,GetJackInfo 函式會採用兩個參數。 輸入參數 pDevice 指向端點裝置的 IMMDevice 介面。 輸出參數 ppJackDesc 指向指標值,如果介面存在,函式會寫入對應 IKsJackDescription 介面的位址。 如果介面不存在,函式會將 Null 寫入 *ppJackDesc ,並傳回錯誤碼E_NOINTERFACE。
在上述程式碼範例中, IMMDevice::Activate 的呼叫會擷取端點裝置的 IDeviceTopology 介面。 端點裝置的裝置拓撲包含連接到介面卡裝置的單一連接器 (連接器號碼 0) 。 在此連線的另一端,介面卡裝置上的連接器代表端點裝置所插入的音訊插孔或插接器。 呼叫 IDeviceTopology::GetConnector 方法會擷取端點裝置上連接器的 IConnector 介面,而 IConnector::GetConnectedTo 方法呼叫會擷取配接器裝置上的對應連接器。 最後, IConnector::QueryInterface 方法呼叫會擷取介面卡裝置連接器的 IPart 介面,而 IPart::Activate 方法呼叫會擷取連接器的 IKsJackDescription 介面,如果有的話。
需求
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | devicetopology.h |