2009-07-29 75 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這麼多例子。