我是C的初学者,我想创建一个列出Windows中所有启动程序的程序..
我想通过打开寄存器可以做到这一点
所以我打开了寄存器。
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 );
我的问题是如何从这些注册表中获取字符串(程序名称)? 当我试图制作一个char arr []时,由于这个错误,我一直在挣扎;并将值移入其中。
所以也许我做错了什么......我应该使用指针还是什么?
有人能给我一些线索吗? 感谢
答案 0 :(得分: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");
}
它会为您提供这样的输出 -
答案 1 :(得分:0)
流程如下:
1)打开注册表项(寄存器是完全不同的东西)
2)询问密钥有多少个注册表值
3)迭代它们并获取它们的数据(这是你要找的)
此代码段获取keyHandle
,枚举值,并将数据输入缓冲区中
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程序。 (你应该,因为你不能真正想到所有的程序名都会以纯英文命名) 注意2:我确实认识到你学习C语言,这是一种开头的语言,但使用C ++或C#这项任务要容易得多。记住以后的任务。