2015-07-11 56 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