Ich habe ein Programm gemacht, das in der Registry den Desktophintergrund ändert, aber das Problem ist, dass Windows den Hintergrund erst beim nächsten Neustart anzeigt.
Wie kann ich erreichen, dass Windows den Desktop ohne Neustart aktualisiert.
Ich benutze Win2000...
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\WINNT\\bild.bmp", SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
return 0;
}
Lässt man SPIF_UPDATEINIFILE weg, dann wird die einstellung nicht gespeichert und das alte bild erscheint wohl beim neustart wieder (habe es nicht ausprobiert).
mr.escape
Leider funktioniert es nicht. Habe alle übernommen, aber der Desktop wird nicht geändert...
Die Funktion scheint schon zu stimmen, allerdings gibt sie 0 zurück(also ein Fehler). Der Pfad stimmt, an was könnte es sonst noch liegen?
Sorry das ich nochmals schreibe:
Nach längerem ausprobieren habe ich herausgefunden, dass es funktioniert, wenn man anstelle des Pfades ein char-Array angibt, das den Pfad enthält. Wieso ist das so wichtig, dass es ein Array ist und nicht einfach angegeben werden kann?
Ein array ist definitiv nicht nötig, aber hast du an die doppelten backslashes im string gedacht? Der pfad ist nämlich der einzige "echte" parameter, die anderen sind lediglich konstante flags und werden entweder vollständig erkannt und verwendet oder schon beim kompilieren bemängelt (include pfad o.ä stimmt nicht).
Nur ein falsch geschriebener oder nicht existierender pfad auf der einen bzw. ein falsches bitmapformat auf anderen seite können echte probleme machen (speichermangel, dateisystemprobleme o.ä. sind wohl eher akademisch).
mr.escape
Ja, an diese habe ich gedacht, denn ansonsten hätte der Compiler irgendwie gesagt "unknown escape sequence". Ausserdem schreibe ich das so:
char array[]="C:\\Bild.bmp"
und dann gebe ich das Array in der Funktion an.
Wenn ich in der Funktion allerdings "C:\\Bild.bmp" angebe, funktioniert es nicht...
Ich habe genau das oben gepostete programm benutzt (mit einer echten pfadangabe) und es ging einwandfrei. Der rückgabewert war mir egal, da es ja ging. Möglicherweise könnte das hier zur lösung beitragen:
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
mr.escape