我目前正在用C ++创建一个程序,允许设备(目前只是我的智能手机)与PC配对。我使用的是WinApi函数,它实际上工作得很好。
要使程序正常工作,我目前需要将设备的蓝牙MAC地址传递给程序,更具体地说, BluetoothRegisterForAuthenticationEx MSDN功能需要它来配对设备。
现在,我实际上并不想输入我的蓝牙MAC地址,但可以输入设备名称(或其他内容)来配对设备。
我查看了winapi蓝牙功能,但没有找到任何内容,所以我的问题是,
当我有其他信息(例如设备名称)但尚未配对时,我是否可以通过编程方式获取某个设备的蓝牙MAC地址? 如果是这样,怎么样?
答案 0 :(得分:0)
您可以使用WSALookupServiceBegin
和WSALookupServiceNext
启动设备发现,然后针对检测到的每个设备(每个WSAQUERYSET
)将lpszServiceInstanceName
与用户键入的名称进行比较。如果匹配,则您在lpcsaBuffer->RemoteAddr.lpSockaddr
字段中有mac地址。此字段可以转换为PSOCKADDR_BTH
,然后您可以在PSOCKADDR_BTH->btAddr
WSAQUERYSET querySet;
memset(&querySet, 0, sizeof(querySet));
querySet.dwSize = sizeof(querySet);
querySet.dwNameSpace = NS_BTH;
HANDLE hLookup;
if(0 != WSALookupServiceBegin(&querySet, LUP_CONTAINERS | LUP_FLUSHCACHE, &hLookup))
{
if(WSAGetLastError() != WSASERVICE_NOT_FOUND)
{
// error during WSALookupServiceBegin
}
else
{
//No BlueTooth device Found
}
return res;
}
DWORD deviceLength = 2000;
char buf[deviceLength];
WSAQUERYSET* pDevice = PWSAQUERYSET(buf);
while (0 == WSALookupServiceNext(hLookup, LUP_RETURN_ADDR | LUP_RETURN_NAME, &deviceLength, pDevice))
{
PSOCKADDR_BTH sa = PSOCKADDR_BTH(pDevice->lpcsaBuffer->RemoteAddr.lpSockaddr);
if(sa->addressFamily != AF_BTH)
{
// Address family is not AF_BTH for bluetooth device discovered
continue;
}
//the name is available in pDevice->lpszServiceInstanceName
//the MAC address is available in sa->btAddr
}
WSALookupServiceEnd(hLookup);
答案 1 :(得分:0)
我在Windows SDK示例中找到了我正在搜索的确切方法。
Microsoft SDK \ Windows \ v7.0 \ Samples \ netds \ winsock \ bluetooth
mehtod被称为NameToBthAddr
,并且与Eric Lemanissier所暗示的相似。