Winapi 函数的作用是:返回不同的值
在RegQueryInfoKey函数中,它将错误结果放入dwcValues、dwcMaxValueName和dwcMaxValueData值中。 dwcValues是连接了多少个端口,但它还有一个计数,即使没有连接 例如,当未连接任何内容时,它显示dwcValues=1,dwcMaxValueName=17,dwcMaxValueData=10 如果连接了一个端口,则显示dwcValues=2,dwcMaxValueName=17,dwcMaxValueData=10 我想知道为什么会这样,并解决这个问题Winapi 函数的作用是:返回不同的值,winapi,mfc,registry,Winapi,Mfc,Registry,在RegQueryInfoKey函数中,它将错误结果放入dwcValues、dwcMaxValueName和dwcMaxValueData值中。 dwcValues是连接了多少个端口,但它还有一个计数,即使没有连接 例如,当未连接任何内容时,它显示dwcValues=1,dwcMaxValueName=17,dwcMaxValueData=10 如果连接了一个端口,则显示dwcValues=2,dwcMaxValueName=17,dwcMaxValueData=10 我想知道为什么会这样,并解
CString CSerialPort::GetPortName()
{
DWORD dwcSubKeys,dwcValues,dwcMaxSubKeyName,dwcMaxValueName,dwcMaxValueData;
dwcSubKeys=dwcValues=dwcMaxSubKeyName=dwcMaxValueName=dwcMaxValueData=0;
DWORD dwSubKeyIndex = 0;
DWORD dwValueIndex = 0;
HKEY hKey = 0;
LONG lStatus = ERROR_SUCCESS;
TCHAR szValueName[255] = {0};
TCHAR szValueData[255] = {0};
lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\DEVICEMAP\\SERIALCOMM"),0,KEY_READ,&hKey);
if (lStatus == ERROR_SUCCESS) {
RegQueryInfoKey(hKey, NULL, NULL, 0,
&dwcSubKeys, &dwcMaxSubKeyName, NULL,
&dwcValues, &dwcMaxValueName, &dwcMaxValueData,
NULL, NULL);
if (dwcValues != 0) {
do {
DWORD dwcValueName = sizeof(szValueName);
DWORD dwcValueData = sizeof(szValueData);
lStatus = RegEnumValue(hKey, dwValueIndex,
szValueName, &dwcValueName,
NULL, NULL,
(BYTE*)szValueData,
&dwcValueData);
dwValueIndex++;
} while (lStatus == ERROR_SUCCESS);
}
RegCloseKey(hKey);
}
return szValueData;
}
你忘记计算默认(未命名)值了吗?@RaymondChen你指的是哪一个?我在开始时将dwcValues设置为默认值(0)。每个注册表项都有一个未命名的值,在RegEdit中称为“(默认)”。这是对诸如“\Device\Serial0”等命名值的补充。@RaymondChen在我的计算机中,当没有任何连接时,DWC值为0。但在另一台计算机上,即使未连接任何设备,该值也为1。可能有人删除了您计算机上的(默认)值。但是默认情况下它就在那里。