<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Wallpaper zur Laufzeit ändern]]></title><description><![CDATA[<p>Hi,<br />
ein Freund von mir möchte ein Programm, dass nach jedem Neustart den Wallpaper ändern(aber keins von diesen vielen Tools). Und wer musses machen: ich^^<br />
Nach einigem Suchen hab ich auch den passenden Regestrierungsschlüssel gefunden um den Dekstop zu ändern, Problem ist nur: wie übernehm ich das direkt?<br />
wenn ich den Schlüssel ändere übernimmt der PC das ganze erst nach einem Neustart.<br />
Dies wäre für das Programm nicht weiter schlimm, ich kann die Wallpaper ja immernoch direkt beim Neustart setzten und beim Hochfahren wird halt der zuletzt ausgewählt angezeigt.<br />
Jedoch geht das doch auch zur Laufzeit (einfacher mitm Testen und nun will ich auch gerne wissen wie das geht), aber wie?</p>
<p>Ich hab dazu folgendes Schlagwort bekommen, weiss aber nicht in wiefern ich das mit C++ verbinden soll:<br />
<em>das Wallpaper kannst du mit der SystemParametersInfo API Funktion wechseln (SPI_SETDESKWALLPAPER).</em></p>
<p>Das hört sich für mich so an als müsste ich einen zusätzlichen header(wenn überhaupt vorhanden) a la windows.h einbinden und damit setzen.</p>
<p>Grüße<br />
Pille</p>
<p>p.s. Ich könnte auch einen ausgewählten Wallpaper immer überschreiben, aber das ist ja uncool <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174282/wallpaper-zur-laufzeit-ändern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 04:33:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174282.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Feb 2007 22:48:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sat, 24 Feb 2007 22:50:50 GMT]]></title><description><![CDATA[<p>Hi,<br />
ein Freund von mir möchte ein Programm, dass nach jedem Neustart den Wallpaper ändern(aber keins von diesen vielen Tools). Und wer musses machen: ich^^<br />
Nach einigem Suchen hab ich auch den passenden Regestrierungsschlüssel gefunden um den Dekstop zu ändern, Problem ist nur: wie übernehm ich das direkt?<br />
wenn ich den Schlüssel ändere übernimmt der PC das ganze erst nach einem Neustart.<br />
Dies wäre für das Programm nicht weiter schlimm, ich kann die Wallpaper ja immernoch direkt beim Neustart setzten und beim Hochfahren wird halt der zuletzt ausgewählt angezeigt.<br />
Jedoch geht das doch auch zur Laufzeit (einfacher mitm Testen und nun will ich auch gerne wissen wie das geht), aber wie?</p>
<p>Ich hab dazu folgendes Schlagwort bekommen, weiss aber nicht in wiefern ich das mit C++ verbinden soll:<br />
<em>das Wallpaper kannst du mit der SystemParametersInfo API Funktion wechseln (SPI_SETDESKWALLPAPER).</em></p>
<p>Das hört sich für mich so an als müsste ich einen zusätzlichen header(wenn überhaupt vorhanden) a la windows.h einbinden und damit setzen.</p>
<p>Grüße<br />
Pille</p>
<p>p.s. Ich könnte auch einen ausgewählten Wallpaper immer überschreiben, aber das ist ja uncool <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234917</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sat, 24 Feb 2007 22:50:50 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sat, 24 Feb 2007 23:41:55 GMT]]></title><description><![CDATA[<p>Laut Doku muss das inetwa so aussehen:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;tchar.h&gt;

void foo()
{
    TCHAR const* newWallpaper = _T(&quot;C:\\BilliePiper.bmp&quot;);
    UINT flags = SPIF_UPDATEINIFILE | SPIF_SENDCHANGE;
    BOOL rc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, newWallpaper, flags);
    ASSERT(rc);
}
</code></pre>
<p>Hab's aber nicht ausprobiert...<br />
Wenn du die Funktion verwendest musst du die Registry wie's aussieht nichtmal selber schreiben, das übernimmt das SPIF_UPDATEINIFILE Flag. Sagt zumindest die Doku...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1234933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1234933</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 24 Feb 2007 23:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 10:27:25 GMT]]></title><description><![CDATA[<p>Also so mit Copy/Paste gehts nicht...<br />
Hast du nen Link zu einer Dokumentation zu dem Thema oder so?</p>
<p>Laut Compiler hängt es an den beiden letzten Zeilen:</p>
<pre><code class="language-cpp">BOOL rc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, newWallpaper, flags);
    ASSERT(rc);
</code></pre>
<p>Da ich aber auch keine Ahnung von dem Thema hab (leider..) weiss ich nichtmal was da vorsich geht^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235002</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sun, 25 Feb 2007 10:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 10:56:51 GMT]]></title><description><![CDATA[<p>Was meldet denn der Kompiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235018</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 25 Feb 2007 10:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 13:07:58 GMT]]></title><description><![CDATA[<p>So hier erstmal der Code fürs Programm (dürfte ja eigentlich nichts anderes sein aber vllt kann ja immer was passieren...)</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;tchar.h&gt;

void foo()
{
    TCHAR const* newWallpaper = _T(&quot;D:\\Bilder\\Basti\\3ddesign054.jpg&quot;);
    UINT flags = SPIF_UPDATEINIFILE | SPIF_SENDCHANGE;
    BOOL rc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, newWallpaper, flags);
    ASSERT(rc);
}

int main(void)
{
    foo();
}
</code></pre>
<p>Meldungen:</p>
<pre><code>8 invalid conversion from `const void*' to `void*' 
8 initializing argument 3 of `BOOL SystemParametersInfoA(UINT, UINT, void*, UINT)' 
9 `ASSERT' undeclared (first use this function)
</code></pre>
<p>Edit: Ich hab mal nen bissel mit dem Code rumgespielt und dort wo es haperte auskommatiert bzw. was geändert. Das Programm läuft nun auch, ich hab:</p>
<pre><code>TCHAR const* newWallpaper = _T(&quot;D:\\Bilder\\Basti\\3ddesign054.jpg&quot;);
</code></pre>
<p>zu</p>
<pre><code>char *string = &quot;Pfad...&quot;
</code></pre>
<p>geändert und halt die letzte FUnktion auskommatiert. Nun bekomm ich aber immer einen grauen Bildschirm (der Wallpaper wird nicht gefunden)<br />
geben ich den Pfad vllt falsch an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235023</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sun, 25 Feb 2007 13:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 12:47:14 GMT]]></title><description><![CDATA[<p>Du musst das auch casten, bzgl. <em>assert</em> nimm die klein-geschriebene Version (C++) und den Header &lt;assert.h&gt;, also:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;assert.h&gt;

void foo()
{
    TCHAR pszNewWallpaper[] = TEXT(&quot;D:\\Bilder\\Basti\\3ddesign054.jpg&quot;);
    UINT flags = SPIF_UPDATEINIFILE | SPIF_SENDCHANGE;
    BOOL rc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, static_cast&lt;void*&gt;(pszNewWallpaper), flags);
    assert(rc);
}

int main(void)
{
    foo();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1235098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235098</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 25 Feb 2007 12:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 14:49:16 GMT]]></title><description><![CDATA[<p>Also deinen Code compiliert er auch, aber es tritt der selbe Effekt auf wie bei meinem geänderten (denke aber das deiner da richtiger ist als meiner^^):<br />
Ich bekomm immer nen grauen Hintergrund, als würde er das Bild nicht finden.<br />
Muss ich vllt zusätzlich noch die Regestrie einträge ändern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235195</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sun, 25 Feb 2007 14:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 18:47:33 GMT]]></title><description><![CDATA[<p>Als ich damals dasselbe mit SystemParametersInfo() machen wollte, habe ich festgestellt dass die Funktion nur mit Bitmaps korrekt arbeitet (das war noch zu Win98-Zeiten)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235369</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 25 Feb 2007 18:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sun, 25 Feb 2007 19:01:21 GMT]]></title><description><![CDATA[<p>Omg...<br />
Ja wie ein schneller Test ergab funtz die Funktion immer nur noch korekkt mit Bitmaps, oh mann..<br />
Also gibts keinen Weg mit JPGS oder so, außer Regestrie-&gt;reboot.</p>
<p>Wie kann ich angeben, dass der mit das Bild strechts? (dachte man müsste ne 1 übergeben, aber das Bewirkt nix)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235397</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sun, 25 Feb 2007 19:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Mon, 26 Feb 2007 00:44:02 GMT]]></title><description><![CDATA[<p>Du könntest probieren erst das entsprechende Wallpaper in der Registry einzutragen, und dann folgenden Code auszuführen:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;assert.h&gt;

void foo()
{
    TCHAR emptyString[] = TEXT(&quot;&quot;);
    BOOL rc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, static_cast&lt;void*&gt;(emptyString), SPIF_SENDCHANGE); // wallpaper weg, nicht speichern
    assert(rc);
    rc = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, 0, SPIF_SENDCHANGE); // auf gespeichertes wallpaper zurückwechseln
    assert(rc);
}
</code></pre>
<p>p.S.: stretchen per SystemParametersInfo wohl garnicht, der entsprechende Key in der Registry sollte aber einfach zu finden sein. Und wenn der Code oben das bewirkt was ich vermute, dann sollte diese Einstellung auch erhalten bleiben.<br />
Sinn des Codeschnippsels oben ist eigentlich nur das neu in die Registry eingetragene Wallpaper anzeigen zu lassen... müsste gehen, wenn sich Windows die aktuellen Einstellungen nicht ausserhalb der Registry nochmal merkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235547</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 26 Feb 2007 00:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Tue, 27 Feb 2007 16:26:07 GMT]]></title><description><![CDATA[<p>Hab das gerade mal programmiert, aber leider arbeitet die Funtkion nur mit Bitmaps (irgendwie voll arm :P)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1236275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1236275</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Tue, 27 Feb 2007 16:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Thu, 01 Mar 2007 18:40:43 GMT]]></title><description><![CDATA[<p>Hio, ich bins mal wieder...<br />
Ich hab folgendes Problem mit der Funktion &quot;RegQueryValueEx&quot;.<br />
Habs nun geschafft in der Registry ein wenig zu schreiben etc. nur das Lesen will nicht so wirklich gewinnen. Laut MSD (<a href="http://msdn2.microsoft.com/en-us/library/ms724911.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms724911.aspx</a>) muss ich dann doch die oben genannte FUnktion nehmen oder?</p>
<p>Problem ist, dass ich irgendwie nicht weiss was ich als &quot;lpcbData&quot; übergeben soll<br />
hier mal der Code</p>
<pre><code class="language-cpp">...
char *value = &quot;irgendeinWert&quot;
char *Pfad =&quot;irgendeinPfad&quot;
char TempValue[255];
HKEY TempHKEY;
RegOpenKeyEx(HKEY_CURRENT_USER,Pfad,0,KEY_ALL_ACCESS,&amp;TempHKEY);
RegQueryValueEx(HKEY_CURRENT_USER,Pfad,0,NULL,&amp;TempValue,(CONST BYTE*)TempValue); //Fehlermeldung: cannot convert `char (*)[255]' to `BYTE*' for argument `5' to `LONG RegQueryValueExA(HKEY__*, const CHAR*, DWORD*, DWORD*, BYTE*, DWORD*)' 
...
RegSetValueEx(TempHKEY,&quot;irgendeinWert&quot;,0,REG_SZ,(CONST BYTE*)value,strlen(value)); //hier gehts oben aber nicht
</code></pre>
<p>Danke schonmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1237671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1237671</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Thu, 01 Mar 2007 18:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Fri, 02 Mar 2007 15:58:23 GMT]]></title><description><![CDATA[<p>Moinsen,</p>
<p>also erstmal n kleiner MSDN Auszug:</p>
<pre><code>lpcbData
[in, out] A pointer to a variable that specifies the size of the buffer pointed to by the lpData parameter, in bytes. When the function returns, this variable contains the size of the data copied to lpData.

The lpcbData parameter can be NULL only if lpData is NULL.
</code></pre>
<p>Und zu dem Fehler: N bisschen auf die Typen der Parameter achten is manchmal von Vorteil <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ... dein TempValue is doch n Array, also prinzipiell schon n Pointer auf den Speicher, den du gefüllt haben willst - du übergibst der Funktion aber nen Pointer auf diesen Pointer, was natürlich nich so toll is.</p>
<p>Greetz <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
M.T.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238181</guid><dc:creator><![CDATA[Manuel]]></dc:creator><pubDate>Fri, 02 Mar 2007 15:58:23 GMT</pubDate></item><item><title><![CDATA[Reply to Wallpaper zur Laufzeit ändern on Sat, 03 Mar 2007 10:26:51 GMT]]></title><description><![CDATA[<p>Hehe okay, hab nochmal die Dokumentation auf msdn gelesen und das Ganze nun so geamcht:</p>
<pre><code class="language-cpp">...
char *value = &quot;irgendeinWert&quot;
char *Pfad =&quot;irgendeinPfad&quot;
char TempValue[255];
HKEY TempHKEY;
DWORD dValue = 255;
RegOpenKeyEx(HKEY_CURRENT_USER,Pfad,0,KEY_ALL_ACCESS,&amp;TempHKEY);
RegQueryValueEx(HKEY_CURRENT_USER,Pfad, 0, NULL, (BYTE*)TempValue,&amp;dValue); 
...
RegSetValueEx(TempHKEY,&quot;irgendeinWert&quot;,0,REG_SZ,(CONST BYTE*)value,strlen(value));
</code></pre>
<p>Denke das geht noch einfacher, so wie ich das unten hinbekommen habe, aber wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1238428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1238428</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Sat, 03 Mar 2007 10:26:51 GMT</pubDate></item></channel></rss>