BluetoothEnumerateInstalledServices 函数用于枚举已安装的蓝牙服务的信息。以下是该函数的声明:
DWORD BluetoothEnumerateInstalledServices(
  HANDLE                      hRadio,
  const BLUETOOTH_DEVICE_INFO *pbtdi,
  DWORD                       *pcServiceInout,
  GUID                        *pGuidServices
);

参数说明:
  •  hRadio: 本地蓝牙无线电的句柄。可以使用 BluetoothFindFirstRadio 函数获取。

  •  pbtdi: 指向 BLUETOOTH_DEVICE_INFO 结构的指针,包含要查询服务信息的蓝牙设备的信息。

  •  pcServiceInout: 传入时指定 pGuidServices 数组的大小,传出时返回实际找到的服务数量。

  •  pGuidServices: 用于接收已安装服务的 GUID 数组的指针。


函数返回 ERROR_SUCCESS 表示成功,其他返回值表示错误。如果函数成功,pGuidServices 数组中将包含已安装服务的 GUID。

以下是一个简单的示例代码,演示如何使用 BluetoothEnumerateInstalledServices 函数:
#include <BluetoothAPIs.h>
#include <stdio.h>

void EnumerateInstalledServices(HANDLE hRadio, const BLUETOOTH_DEVICE_INFO *pbtdi)
{
    DWORD dwNumServices = 0;
    GUID *pGuidServices = NULL;

    // 获取已安装服务的数量
    DWORD result = BluetoothEnumerateInstalledServices(hRadio, pbtdi, &dwNumServices, NULL);

    if (result == ERROR_SUCCESS)
    {
        if (dwNumServices > 0)
        {
            // 为服务数组分配内存
            pGuidServices = (GUID *)malloc(dwNumServices * sizeof(GUID));

            // 重新调用函数,获取服务信息
            result = BluetoothEnumerateInstalledServices(hRadio, pbtdi, &dwNumServices, pGuidServices);

            if (result == ERROR_SUCCESS)
            {
                printf("Installed Bluetooth Services:\n");
                for (DWORD i = 0; i < dwNumServices; ++i)
                {
                    printf("  Service %d: %s\n", i + 1, 
                           (LPCWSTR)BluetoothGetStringFromGUID(&pGuidServices[i]));
                }
            }
        }
        else
        {
            printf("No installed Bluetooth services found.\n");
        }
    }
    else
    {
        printf("Failed to enumerate installed Bluetooth services. Error: %d\n", result);
    }

    // 释放内存
    free(pGuidServices);
}

int main()
{
    HANDLE hRadio;
    hRadio = BluetoothFindFirstRadio(NULL, &hRadio);

    if (hRadio != NULL)
    {
        BLUETOOTH_DEVICE_INFO btdi = { sizeof(BLUETOOTH_DEVICE_INFO), 0 };

        // 设置蓝牙设备信息,例如通过之前的配对操作获取的信息
        // ...

        EnumerateInstalledServices(hRadio, &btdi);

        // 关闭蓝牙无线电句柄
        CloseHandle(hRadio);
    }
    else
    {
        printf("No Bluetooth radios found.\n");
    }

    return 0;
}

请注意,使用此函数需要管理员权限。确保在调用此函数之前,您的应用程序已经获取了适当的权限。


转载请注明出处:http://www.zyzy.cn/article/detail/24061/Win32 API/Bluetoothapis.h/BluetoothEnumerateInstalledServices