首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

DirectSound 波形捕捉系列(一):列舉捕捉裝置

     編輯:關於C++

DirectSoundCaptureEnumerate 列舉系統音訊捕捉裝置

當應用程式需讓使用者選擇裝置、需多裝置支援、或需查詢特定能力時,必須列舉可用捕捉裝置。

列舉三大目的

  1. 識別可用硬體
  2. 取得每個裝置的 GUID (供建立物件使用)
  3. 建立暫時裝置物件查詢詳細能力

回呼函式原型

BOOL CALLBACK DSEnumProc(
    LPGUID lpGUID,        // 裝置 GUID (首個裝置為 NULL)
    LPCTSTR lpszDesc,     // 裝置描述字串
    LPCTSTR lpszDrvName,  // 驅動程式名稱
    LPVOID lpContext      // 使用者自訂內容指標
);
  • 返回 TRUE 繼續列舉,FALSE 停止
  • 首個裝置 ("Primary Sound Driver") 的 lpGUID == NULL

範例:填充下拉選單

BOOL CALLBACK DSEnumProc(LPGUID lpGUID, LPCTSTR lpszDesc,
                         LPCTSTR lpszDrvName, LPVOID lpContext) {
    HWND hCombo = (HWND)lpContext;
    LPGUID pGuidCopy = nullptr;

    if (lpGUID) {
        pGuidCopy = (LPGUID)malloc(sizeof(GUID));
        memcpy(pGuidCopy, lpGUID, sizeof(GUID));
    }

    int idx = ComboBox_AddString(hCombo, lpszDesc);
    ComboBox_SetItemData(hCombo, idx, pGuidCopy);  // 存儲 GUID 指標
    return TRUE;
}

// 對話方塊初始化時呼叫
if (FAILED(DirectSoundCaptureEnumerate(DSEnumProc, (void*)&hCombo))) {
    EndDialog(hDlg, TRUE);
}

預設裝置捷徑

若僅需使用系統預設捕捉裝置,無需列舉,直接呼叫 DirectSoundCaptureCreate8(nullptr, ...) 即可。

完整系列導覽

第一篇:列舉裝置 ← 當前 | 第二篇:建立裝置物件 | 第三篇:查詢裝置能力

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved