Detta är vad jag kommit fram till de senaste timmarna (XP):
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(){
char* dir[] = {"Control Panel\\Desktop"};
char* key[] = {"WallPaper"};
char* wlp[] = {"C:\\2596.jpg"};
HKEY keyHandle;
char regValue[260];
DWORD size = 259;
DWORD type;
printf("A small desktop image changer by Dalton Sleeper (XP)\n\n");
// read
if(RegOpenKeyEx(HKEY_CURRENT_USER, dir[0], 0, KEY_QUERY_VALUE, &keyHandle) == ERROR_SUCCESS){
RegQueryValueEx(keyHandle, key[0], NULL, &type, (LPBYTE)regValue, &size);
printf("Registry key: \"HKEY_CURRENT_USER\\%s\"\n\n%s: %s\n", dir[0], key[0], regValue);
}
else printf("The registry key could not be read!\n");
RegCloseKey(keyHandle);
// write
if(RegOpenKeyEx(HKEY_CURRENT_USER, dir[0], 0, KEY_SET_VALUE, &keyHandle) == ERROR_SUCCESS){
if (RegSetValueEx(keyHandle, key[0], 0, REG_SZ, (LPBYTE)wlp[0], strlen(wlp[0]) * sizeof(char)) == ERROR_SUCCESS){
printf("\n\nRegistry key: \"HKEY_CURRENT_USER\\%s\"\n\n%s: %s\n", dir[0], key[0], wlp[0]);
}
else printf("The registry key could not be set!\n");
}
RegCloseKey(keyHandle);
// refresh
system("RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters");
system("pause");
return 0;
}
(Vista/Win7):
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
char* image_1[] = {"c:\\2596.jpg"};
char* image_2[] = {"c:\\2595.jpg"};
char buffer[260];
printf("Another small desktop image changer by Dalton Sleeper (Vista/Win7)\n\n");
// get current wallpaper
SystemParametersInfo(SPI_GETDESKWALLPAPER, sizeof(buffer), buffer, 0);
// if the same, switch to the other one
if(strcmp(buffer, *image_2) == 0)
SystemParametersInfo(SPI_SETDESKWALLPAPER, sizeof(*image_1),
*image_1, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
else
SystemParametersInfo(SPI_SETDESKWALLPAPER, sizeof(*image_2),
*image_2, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
// system("pause");
return 0;
Här är det möjligt att fånga returvärdet från SystemParametersInfo om man tycker det är intressant...
Det ovanstående fungerade hyfsat på min dator men det betyder inte att era sopburkar åker inte på blue screen eller brinner upp. Tänk på att detta är windowsregistret som i princip styr allt i operativsystemet och att mycket kan gå åt pipsvängen om minsta lilla går fel vid till exempel skrivning eller borttagning. Testa på egen risk säger jag bara