2015-07-11 57 views
0

我用C初學者,我想打一個程序,列出了在窗口上的啓動程序列出在C啓動程序..我試圖通過使用註冊表

我想通了,我可以做到這一點通過打開的寄存器 所以我開的寄存器。 ret = RegOpenKeyEx (HKEY_LOCAL_MACHINE , TEXT ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_QUERY_VALUE, &hKey);

和閱讀 ret = RegQueryValueEx (hKey, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, &d_type, (LPBYTE)d_buffer, &d_byte);

我的問題是我怎麼能得到這些登記的字符串(程序名)? 我一直在掙扎,由於錯誤,當我試圖讓ARR []的字符;並將值移入其中。

所以也許我做錯了什麼。我應該使用指針還是什麼?

任何人都可以給我一些這方面的線索? 感謝

回答

0

流程是這樣的:
1)打開註冊表項(寄存器是完全地不同的東西)
2)問很多註冊表值如何的關鍵有
3)遍歷他們,讓他們的數據(這是你在找什麼)

此代碼段獲得在keyHandle,枚舉值,並獲得theit數據到緩衝區

DWORD numberOfValues; 
LONG result = RegQueryInfoKey(
    keyHandle, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    &numberOfValues, 
    NULL, 
    NULL, 
    NULL, 
    NULL); 

wchar_t valueName [300]; 
DWORD bufferSize; 

for (DWORD i = 0; i<numberOfValues; i++){ 
    bufferSize = 300; 
    LONG result = RegEnumValue(
     keyHandle, 
     i, 
     valueName, 
     &bufferSize, 
     0, 
     nullptr, 
     nullptr, 
     &bufferSize); 
    if (result == ERROR_SUCCESS){ 
     valueName[bufferSize] = 0; 
     //do something with valueName, this is the name of the program 

    } 
} 

注:此程序假設你定義你的程序爲Unicode程序。 (你應該,因爲你不能真正注意到所有的程序名都以純英文命名)
note2:我意識到你學會了C語言,這是一個開始使用的語言,但是使用C++這個任務更容易或C#。請記住將來的任務。

+0

好吧,說實話我沒有考慮過把它變成unicode,所以,很高興知道。我會記住這一點,實際上是想學習C++。 :)無論如何感謝大衛!這對我幫助很大 –

0
RegQueryValueEx (hKey, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, &d_type, (LPBYTE)d_buffer, &d_byte); 

,如果你預先知道值的名稱的RegQueryValueEx才起作用。

RegQueryValueEx (hKey, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), "SmartAudio", &d_type, (LPBYTE)d_buffer, &d_byte); 

如果名稱爲Smart Audio的值存在,則會打印數據。但是,如果你不知道的值的名稱,那麼你可以使用

int main() 
{ 
    system("C:\\Windows\\system32\\reg.exe QUERY HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"); 
} 

它會給你的輸出這樣的 - enter image description here

+0

這並沒有真正回答這個問題,因爲你只是產生外部輸出,而實際上並沒有在代碼中獲得名稱 –

+0

是的,這是一種獲得輸出的簡單方法!感謝你的回答! :) –

+0

@YelahJung我很高興:)一般規則upvote或接受答案! – udit043