我正在学习C并试图制作一个可以更改Windows 7登录背景屏幕的应用程序。
我知道我需要更改一些注册表值(无需在此处进行编程的说明:http : //helpdeskgeek.com/windows-7/change-the-windows-7-login-screen-background-image/)
因此,我知道为了更改注册表中的值,我需要创建一个打开值的句柄,然后对其进行更改。
这是我到目前为止所拥有的:
char* number = 0x00000001;
HKEY key;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background"), 0, KEY_SET_VALUE, &key) == ERROR_SUCCESS){
printf("Key location open successful \n");
if (RegSetValueEx(key, "OEMBackground", 0, REG_DWORD, (LPBYTE)&number, sizeof(DWORD))){
printf("Key not changed in registry \n");
printf("Error %d ", GetLastError());
}
else{
printf("Key changed in registry \n");
}
RegCloseKey(key);
}
else {
printf("Unsuccessful in opening key \n");
printf("Cannot find key value in registry \n");
printf("Error: %d ", GetLastError());
}
我说的结果是键是打开的,并且值已更改。但是值没有改变。
注册表中的值当前为0。我想将其更改为1。
我在这里做错了什么?
我建议进行以下更改:
char* number = 0x00000001
不是如何声明一个DWORD
。你要DWORD value = 0x00000001
。然后传递(BYTE*)&value
给RegSetValueEx
。RegSetValueEx
对ERROR_SUCCESS
。requireAdministrator
选项以确保过程得到提升。KEY_WOW64_64KEY
调用RegOpenKeyEx
以访问64位注册表视图时,请包括该标志。以下程序可以解决问题:
#include <stdio.h>
#include <windows.h>
int main(void)
{
DWORD number = 0x00000001;
HKEY key;
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background", 0, KEY_SET_VALUE | KEY_WOW64_64KEY, &key) == ERROR_SUCCESS)
{
printf("Key location open successful \n");
if (RegSetValueExW(key, L"OEMBackground", 0, REG_DWORD, (LPBYTE)&number, sizeof(DWORD)) == ERROR_SUCCESS)
{
printf("Key changed in registry \n");
}
else{
printf("Key not changed in registry \n");
printf("Error %u ", (unsigned int)GetLastError());
}
RegCloseKey(key);
}
else
{
printf("Unsuccessful in opening key \n");
printf("Cannot find key value in registry \n");
printf("Error: %u ", (unsigned int)GetLastError());
}
return 0;
}
确保使用链接正确的应用程序清单到程序,requireAdministrator
以确保高程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句