Entwickler-Ecke
Windows API - Registry in Win98/NT/XP (Done)
Terra23 - Mi 23.04.03 22:32
Titel: Registry in Win98/NT/XP (Done)
Hi @ All.
Sagt mal, wird das Wallpaper in der Registry nur in Windows98 unter
Control Panel\Desktop\Wallpaper abgelegt oder ist das in jedem Windows so? Ich habe ein Programm geschrieben, daß auf diesen Schlüssel zugreift und es läuft bei mir wunderbar. Jedoch läuft es bei meinem Lehrer nicht, der hat XP.
Oder funzt einfach nur der Befehl
Quelltext
1:
| SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE) |
unter XP etc. nicht?
Wäre euch für Hilfe echt dankbar.
Grüße, Alex..
TheNeon - Do 24.04.03 00:38
also ich hab Win2k, das ist ja sehr verwandt mit WinXP und da hab ich eben für dich nachgesehen und der Wallpaper wird gespeichert unter:
Schlüssel:
HKEY_CURRENT_USER\Control Panel\Desktop
Zeichenfolge:
Wallpaper
.... musst also ne Abfrage nach dem System machen und dann dementsprechend umstellen
Delete - Do 24.04.03 08:37
| PSDK hat folgendes geschrieben: |
Quelltext 1: 2: 3: 4: 5: 6:
| BOOL SystemParametersInfo( UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni ); | |
Im Fall von
SPI_SETDESKWALLPAPER muss
pvParam der Name der Bitmapdatei sein. Setzt du diesen Wert auf NIL, wie dein Quellcode zeigt:
Quelltext
1:
| SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE) |
dann wird das vorhandene Hintergrundbild entfernt:
| PSDK hat folgendes geschrieben: |
| Sets the desktop wallpaper. The value of the pvParam parameter determines the new wallpaper. To specify a wallpaper bitmap, set pvParam to point to a null-terminated string containing the name of a bitmap file. Setting pvParam to "" removes the wallpaper. Setting pvParam to SETWALLPAPER_DEFAULT or NULL reverts to the default wallpaper. |
Dieser Weg sollte unter allen Windows-Versionen funktionieren und ist daher, IMHO, dem Registry-Zugriff erst einmal vorzuziehen.
Terra23 - Do 24.04.03 19:29
Nein, eigentlich nicht.
Bei mir klappt das so:
Mein Tool liest den Pfad des Wallpaper aus einem Label aus, setzt den Schlüssel in der Registry (dein Schlüssel stimmt übrigens mit meinem überein) und aktualisiert das Wallpaper und zwar mit eben diesem Code:
| Zitat: |
Code:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE)
|
Ich weiß zwar, was du meinst (nil entfernen und den Pfad angeben), aber warum geht es bei mir so, ohne das das Wallpaper entfernt wird?
Kannst du mir das sagen? Soll natürlich nicht heißen, daß ich deinen Vorschlag nicht zu Rate ziehen werde. ;-)
Grüße..
Terra23 - Fr 25.04.03 23:04
Ich habe mal drüber nachgedacht und in der einen Antwort neulich stand auch nicht nil sondern die Pfadangabe. Kann es sein, daß es deshalb bei meinem Lehrer nicht geht?
TheNeon - Sa 26.04.03 02:05
| Terra23 hat folgendes geschrieben: |
| Ich habe mal drüber nachgedacht und in der einen Antwort neulich stand auch nicht nil sondern die Pfadangabe. Kann es sein, daß es deshalb bei meinem Lehrer nicht geht? |
ich kenne mich mit diesem Befehl noch nicht so aus, aber ich meine, wenn du einen Wallpaper setzt musst du Windows doch sagen, welchen er nehmen soll, oder?!? Eigentlich müsste anstatt dem NILL eine Pfadangabe rein ....... die
0 gibt meines wissens die Streckung, Titelung oder so an :(
Terra23 - Sa 26.04.03 12:40
Wenn ich hier mit Renovieren für heute fertig bin, schaue ich mir mal mein Programm von vorne an. Ich habe neulich ja mal gefragt, wie ich das Wallpape ändere. Da hat Popov in der FAQ einen Beitrag zu und das benutzt er nil, ich denke aber, daß liegt daran, daß er eine allgemeine Prozedur dafür entwickelt hat, um die Wallpaper zu ändern; wie gesagt, ich bin da relativ unbeholfen was z.B. den Befehl nil angeht, aber ich versuche es mal heute Abend, in dem ich da den Pfad reinsetze. Dennoch: Bei mir steht nil und das Tool wechselt das Wallpaper wie gewünscht und setzt es nicht auf leer. Liegt vielleicht auch daran, daß ich vorher in die Registry gehe und den Key überschreiben lasse, oder?
Naja, ich kümmere mich nachher darum.
wulfskin - Sa 26.04.03 12:42
| Terra23 hat folgendes geschrieben: |
| Ich habe mal drüber nachgedacht und in der einen Antwort neulich stand auch nicht nil sondern die Pfadangabe. Kann es sein, daß es deshalb bei meinem Lehrer nicht geht? |
| PSDK hat folgendes geschrieben: |
| Sets the desktop wallpaper. The value of the pvParam parameter determines the new wallpaper. To specify a wallpaper bitmap, set pvParam to point to a null-terminated string containing the name of a bitmap file. Setting pvParam to "" removes the wallpaper. Setting pvParam to SETWALLPAPER_DEFAULT or NULL reverts to the default wallpaper. |
Zu deutsch: Setze für den dritten Parameter den Pfad des Bitmaps für einen neuen Hintergrund oder nil um den Hintergrund zu entfernen.
| TheNeon hat folgendes geschrieben: |
| die 0 gibt meines wissens die Streckung, Titelung oder so an |
Oder so ist gut ;)! Der Parameter wird gar nicht benutzt, deshalb ist er 0.
Gruß wulfskin!
Terra23 - Sa 26.04.03 19:43
Ich habe jetzt mal anstelle von
nil den Pfad des Bitmaps angegeben und dann bekomme ich folgende Meldung:
Quelltext
1:
| [Error] XChange_Unit.pas(119): Incompatible types: 'String' and 'Pointer' |
wulfskin - So 27.04.03 02:09
Es wird ein PChar erwartet und die übergibst einen String, das kann nicht gehen! Antwort: Typecast:
Quelltext
1:
| SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(Pfad), SPIF_SENDWININICHANGE) |
Delete - So 27.04.03 09:53
Titel: sehr
Bild setzen:
Quelltext
1: 2: 3:
| SystemParametersInfo(SPI_SETDESKWALLPAPER,0, pchar(ExtractFilePath(paramstr(0)) + 'pic02.bmp'), SPIF_SENDWININICHANGE); |
gesetztes Bild entfernen:
Quelltext
1: 2:
| SystemParametersInfo(SPI_SETDESKWALLPAPER,0, pchar(''),SPIF_SENDWININICHANGE); |
Originalhintergrundbild wiederherstellen:
Quelltext
1: 2:
| SystemParametersInfo(SPI_SETDESKWALLPAPER,0, nil,SPIF_SENDWININICHANGE); |
Das war übrigens auch mein Denkfehler! Im PSDK heißt es ja recht eindeutig
| Zitat: |
| Setting pvParam to "" removes the wallpaper. Setting pvParam to SETWALLPAPER_DEFAULT or NULL reverts to the default wallpaper. |
Will man also das von einem selbst gesetzte Hintergrundbild wieder entfernen, muss man
pchar('') nehmen. Will man das ursprüngliche Originalhintergrundbild wiederherstellen, benutzt man
nil.
Unter Win98 habe ich übrigens bemerkt, dass der Aufruf von
nil nur funktioniert, wenn man vorher ein Hintergrundbild eingestellt hatte. Ansonsten passiert dabei nichts.
Gruß.
Terra23 - So 27.04.03 14:58
Man, man. Vielleicht sollte ich nicht immer Beiträge lesen, wenn ich tierisch müde bin, dann übersieht man so leicht einiges. Danke für eure Beiträge. Es funktioniert, in dem ich einfach PChar davor setze. :-)
:beer:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!