19,503
社区成员
发帖
与我相关
我的任务
分享
UINT CIrdaPort::FindPortIndex()
{
// Look into the registry for the infrared port number
UINT uiPort = 0;
HKEY hKey = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Drivers\\BuiltIn\\IrDA"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;
if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;
if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}
RegCloseKey(hKey);
}
if (uiPort != 0)
return uiPort;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Comm\\IrDA"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;
if (RegQueryValueEx(hKey, _T("Port"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;
if (RegQueryValueEx(hKey, _T("Port"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}
RegCloseKey(hKey);
}
if (uiPort != 0)
return uiPort;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Comm\\IrDA\\Linkage"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;
if (RegQueryValueEx(hKey, _T("Bind"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
{
if ((dwSize >= sizeof(TCHAR)) && (dwSize % sizeof(TCHAR) == 0))
{
LPTSTR pszSubKey = new TCHAR[dwSize / sizeof(TCHAR) + 1];
if (RegQueryValueEx(hKey, _T("Bind"), NULL, NULL, (LPBYTE) pszSubKey, &dwSize) == ERROR_SUCCESS)
{
pszSubKey[dwSize / sizeof(TCHAR)] = _T('\0');
CString strSubKey;
strSubKey.Format(_T("Comm\\%s\\Parms"), pszSubKey);
// AfxMessageBox(strSubKey);
HKEY hNewKey = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, 0, &hNewKey) == ERROR_SUCCESS && hNewKey != NULL)
{
dwSize = 0;
if (RegQueryValueEx(hNewKey, _T("Port"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;
if (RegQueryValueEx(hNewKey, _T("Port"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}
RegCloseKey(hNewKey);
}
}
delete [] pszSubKey;
}
}
RegCloseKey(hKey);
}
if (uiPort != 0)
return uiPort;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Drivers\\BuiltIn\\IrCOMM"), 0, 0, &hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;
if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, NULL, &dwSize) == ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;
if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, (LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}
RegCloseKey(hKey);
}
return uiPort;
}