Hallo,
es geht mal wieder um SBScript.
Und zwar suche ich eine Möglichkeit vom Songbeamer aus, das Desktop-Hintergrundbild zu ändern. Kennt da jemand was?
Warum will ich das machen? Der grund ist unser nächster Jugendgottesdienst. Thema: Wähle! (Und wir machen alles im Matrix-Style). Dafür will ich jetzt auf dem Desktophintergrund die Matrix laufen lassen (Das geht mit ZMatrix) und diese noch mit dem eigentlichen Hintergrundbild OR verknüpfen.
Darüber wird dann der Songbeamer mit transparentem Hintergrund angezeigt.
Gruß Kex
Desktophintergrund per SBScript ändern
-
- Beiträge: 155
- Registriert: Mo Mai 19, 2008 11:00 am
- Wohnort: Heidenheim a. d. Brenz
- Kontaktdaten:
Desktophintergrund per SBScript ändern
Und so zerbröselt der Kex nun mal ...
(frei nach Bruce Allmächtig)
(frei nach Bruce Allmächtig)
Dafür mußt du die Funktion SystemParametersInfo von Windows importieren.
Hier mal ein Beispiel:
Hier mal ein Beispiel:
Code: Alles auswählen
uses
SysUtils;
function SystemParametersInfo(uiAction, uiParam: Integer;
pvParam: PChar; fWinIni: Integer): Integer; stdcall; external 'user32.dll' name 'SystemParametersInfoA';
const
SPI_SETDESKWALLPAPER = 20;
SPIF_SENDCHANGE = 2;
var
Path: String;
Res: Integer;
begin
Path := 'C:\Users\Public\Pictures\Sample Pictures\Autumn Leaves.jpg';
Res := SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Path, SPIF_SENDCHANGE);
if Res = 0 then
RaiseLastOSError;
// zurücksetzen:
if MessageDlg('Ursprüngliches Bild wiederherstellen', mtConfirmation, [mbYes, mbNo], -1) = mrYes then
begin
Path := '';
Res := SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Path, SPIF_SENDCHANGE);
if Res = 0 then
RaiseLastOSError;
end;
end.
Gruß, Sebastian
-
- Beiträge: 155
- Registriert: Mo Mai 19, 2008 11:00 am
- Wohnort: Heidenheim a. d. Brenz
- Kontaktdaten:
Danke, das ging (mal wieder) schnell.
Aber ich vermute mal du hast kein Windows XP als Betriebssystem. Denn ich bekam beim Testen eine Fehlermeldung beim ausführen des Scripts.
Ein Blick in die MSDN gab mir dann die Erklärung.
Aber ich vermute mal du hast kein Windows XP als Betriebssystem. Denn ich bekam beim Testen eine Fehlermeldung beim ausführen des Scripts.
Ein Blick in die MSDN gab mir dann die Erklärung.
Wenn ich bei mir (Ich habe Windows XP) ein .bmp File zum Testen verwende, dann funktioniert es.
SPI_SETDESKWALLPAPER:
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 full path to the bitmap file. Setting pvParam to "" removes the wallpaper. Setting pvParam to SETWALLPAPER_DEFAULT or NULL reverts to the default wallpaper.
The pvParam parameter can specify a .jpg file.
Windows Server 2003 and Windows XP/2000: The pvParam parameter cannot specify a .jpg file.
Und so zerbröselt der Kex nun mal ...
(frei nach Bruce Allmächtig)
(frei nach Bruce Allmächtig)
-
- Beiträge: 155
- Registriert: Mo Mai 19, 2008 11:00 am
- Wohnort: Heidenheim a. d. Brenz
- Kontaktdaten:
Ich hab noch ein kleines Problem festgestellt: Wenn ich meinen Desktophintergrund wechsle wie oben beschrieben, bekommt ZMatrix das nicht immer mit, und darum muss ich ZMatrix extra eine Nachricht schicken, damit alles richtig funktioniert.
Ich hab mir ein kleines C++ Programm geschrieben, das genau das macht. Das kann ich dann mit CreateProcess ausführen. Funktioniert also eigentlich alles wunderbar und eine Antwort ist deshalb auch nicht so dringend.
Aber aus reinem Interesse: Sowas geht bestimmt auch mit SBScript direkt. Die Frage ist wie?
Hier mein C++ Code (der Einfachheit halber mal ohne Fehlerüberprüfung):
Ich vermute mal die Befehle FindWindow() und SendMessage() sind unter Delphi genau die selben oder ähnlich. Hab aber auf die schnelle nichts im I-Net gefunden.
Gruß Kex
Ich hab mir ein kleines C++ Programm geschrieben, das genau das macht. Das kann ich dann mit CreateProcess ausführen. Funktioniert also eigentlich alles wunderbar und eine Antwort ist deshalb auch nicht so dringend.
Aber aus reinem Interesse: Sowas geht bestimmt auch mit SBScript direkt. Die Frage ist wie?
Hier mein C++ Code (der Einfachheit halber mal ohne Fehlerüberprüfung):
Code: Alles auswählen
int _tmain()
{
const UINT ID_REFRESH = 40003;
HWND matrix_wnd = ::FindWindow(NULL, "Matrix Code Listener");
::SendMessage(matrix_wnd, WM_COMMAND, ID_REFRESH, 0);
return 0;
}
Gruß Kex
Und so zerbröselt der Kex nun mal ...
(frei nach Bruce Allmächtig)
(frei nach Bruce Allmächtig)