2009-07-29 72 views
1

Ineed获得特定的值,打开该键 “HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ Microsoft SQL Server的\ 100 \”如何打开注册表和C++

,并使用C++获得 “VerSpecificRootDir” 值... 。如何可以我这样做

我不知道生根粉它可以在任何一个可以帮助我在这方面..

让所有我做的是

unsigned long type=REG_SZ, size=1024; 
char res[1024]=""; 
HKEY hk; 

long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Microsoft SQL Server\\100"), 
        0,KEY_QUERY_VALUE, &hk); 
if (n == ERROR_SUCCESS) 
{ 
    printf("OK \n"); 
    RegQueryValueEx(hk,L"VerSpecificRootDir",NULL,&type,(LPBYTE)&res[0],&size); 
    RegCloseKey(hk); 

} 

的支持之后,但在这个IA米没有得到“VerSpecificDirectory”的价值,我错过了让我知道?什么是错在此代码....

回答

1

我目前只知道该怎么做,通过使用Qt framework

QSettings settings("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\"); 
QString dir = settings.value("VerSpecificRootDir"); 

Qt是免费的,允许你使用简单,非常好的记录的C++ API,而不是的混合Windows API。对不起 - 这听起来适合做广告......但我之前曾经在设计糟糕的Windows API方面苦苦挣扎,而不是找到了Qt,这使我可以在不需要修改代码的情况下为多平台开发更快和(很酷的好处)。

的问候, 克里斯

3

您可以使用Windows功能SHRegGetValue这样的:

TCHAR buffer[260]; 
DWORD bufferSize = sizeof(buffer); 
SHRegGetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Microsoft SQL Server\\100", "VerSpecificRootDir", SRRF_RT_REG_SZ, NULL, buffer, &bufferSize); 

调用该函数后,buffer将包含目录的空终止字符串。可能也想检查返回值是否有错误。

2
#include <windows.h> 

    HKEY hKey; 
    int buffersize = 1024; 
    char *buffer = new char[buffersize]; 

    RegOpenKeyEx (HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Microsoft SQL Server\\100",NULL,KEY_READ,&hKey); 
    RegQueryValueEx(hKey,"VerSpecificRootDir",NULL,NULL,(LPBYTE) buffer, buffersize); 

    std::cout << buffer; 

    RegCloseKey (hKey); 
+0

如何获取VerSpecificRootDir所包含的值... – Cute 2009-07-29 09:52:32

0

注册表API是用(〜15年)从Windows 95开始。在MSDN上都有详细记录;如果你在乎Google这么多例子。