gpt4 book ai didi

C++/WIN32 (XP) 蓝牙设备名称更改

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:03 27 4
gpt4 key购买 nike

有谁知道如何以编程方式更改蓝牙设备名称?或者设备名称存储在哪里?

最佳答案

已解决

这是封装到类方法中的现成解决方案。

bool CBluetooth::ChangeLocalRadioName(LPTSTR newName)
{
LPTSTR instanceID = GetGenericBluetoothAdapterInstanceID();

if (instanceID == NULL)
{
//_tprintf(_TEXT("Failed to get Generic Bluetooth Adapter InstanceID\n"));
return false;
}
LPTSTR instanceIDModified = new TCHAR[_tcslen(instanceID)];
_tcscpy(instanceIDModified, instanceID);
find_and_replace(instanceIDModified, _TEXT("\\"), _TEXT("#"));


HANDLE hDevice;
TCHAR fileName[1024] = { 0 };
_tcscpy(fileName, _TEXT("\\\\.\\"));
_tcscat(fileName, instanceIDModified);
_tcscat(fileName, _TEXT("#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"));

hDevice = CreateFile(fileName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if (hDevice == INVALID_HANDLE_VALUE)
{
//_tprintf(_TEXT("Failed to open device. Error code: %d\n"), GetLastError());
return false;
}

//Change radio module local name in registry
LPTSTR RMLocalName = newName;
CHAR bufRMLocalName[256];

HKEY hKey;
TCHAR rmLocalNameKey[1024] = { 0 };
LSTATUS ret;
_tcscpy(rmLocalNameKey, _TEXT("SYSTEM\\ControlSet001\\Enum\\"));
_tcscat(rmLocalNameKey, instanceID);
_tcscat(rmLocalNameKey, _TEXT("\\Device Parameters"));

ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, rmLocalNameKey,
0L, KEY_SET_VALUE , &hKey);

if(ret != ERROR_SUCCESS)
{
//_tprintf(TEXT("Failed to open registry key. Error code: %d\n"), ret);
return false;
}

ret = RegSetValueEx(hKey, _TEXT("Local Name"), 0, REG_BINARY,
(LPBYTE)RMLocalName,strlen(RMLocalName));

if (ret != ERROR_SUCCESS)
{
//_tprintf(TEXT("Failed to set registry key. Error code: %d\n"), ret);
return false;
}

RegCloseKey(hKey);

// This check decides what IO control code to use based on if we're in XP or Vista (and later).
OSVERSIONINFO osver;
osver.dwOSVersionInfoSize = sizeof(osver);
GetVersionEx(&osver);

UINT ctlCode = (UINT)(6 > osver.dwMajorVersion ? 0x220fd4 : 0x411008);
long reload = 4; // tells the control function to reset or reload or similar...
DWORD bytes = 0; // merely a placeholder

// Send radio module driver command to update device information
if (!DeviceIoControl(hDevice, ctlCode, &reload, 4, NULL, 0, &bytes, NULL))
{
//_tprintf(TEXT("Failed to update radio module local name. Error code: %d\n"), GetLastError());
return false;
}



return true;

}

感谢:clumpter

关于C++/WIN32 (XP) 蓝牙设备名称更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com