Guten Morgen.
Ich arbeite leider viel zu selten mit Autoit, da ich nur Scripts schreibe, wenn ich welche brauche, deshalb brauche ich bei meinem aktuellen Script einmal Eure Hilfe.
Mein Gedanke war, ich hätte gerne eine Uhr samt Datum gut sichtbar in der Mitte meines Bildschirms.
(Klar, dafür gibts sicher genug Programme, aber ich wollte es eben selbst schreiben)
Hab mir also einen Hintergrund designt, das Script Uhrzeit und Datum als Label drüber legen, das ganze als Screenshot zwischenspeichern und das Bild als Wallpaper nutzen lassen.
Klappt auch wunderbar, um das das Fenster von dem der Screenshot gemacht wird nicht immer im Blick zu haben, wollte ich es i.wo außerhalb des Bildschirms platzieren.
Und hier war mein Denkfehler... Außerhalb gibts ja leider nix, wovon man ein Screenshot machen könnte...
Denke mir mal, dass es da bessere Lösungen für mein Anliegen gibt, ich würd aber wenn möglich gerne erstmal bei diesem Ansatz bleiben.
Was ich brauche ist also eine Möglichkeit den Inhalt des Fensterns, bzw. der GUI i.wie als Bild zu speichern.
Hier ist das Script das ich bis dahin habe:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ScreenCapture.au3>
Global $sBGFilePath = @ProgramsDir & "\Clock_Wallpaper\Clock_BG.bmp"
Global $sCaptureFilePath = @TempDir & "\TempClockFile.bmp"
Global $sTimeCheck
$hGUI = GUICreate("", 400, 200, -1000, -1, $WS_POPUP, 0x08000000)
$idBG = GUICtrlCreatePic($sBGFilePath, 0, 0, 400, 200)
$idTime = GUICtrlCreateLabel("", 10, 10, 380, 100, $SS_CENTER)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 80, 500, 0, "Digital-7")
$idDate = GUICtrlCreateLabel("", 10, 120, 380, 60, $SS_CENTER)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 45, 200, 0, "Digital-7")
GUISetState(@SW_SHOW)
_Update()
AdlibRegister("_Update", 1000)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _Update()
Local $Checksum = @HOUR & @MIN
If $sTimeCheck < $Checksum Then
$sTimeCheck = $Checksum
_SetWalpaper()
ElseIf $sTimeCheck = 2359 AND $Checksum = 0000 Then
$sTimeCheck = $Checksum
_SetWalpaper()
EndIf
EndFunc
Func _SetWalpaper()
$aHour = StringSplit(@HOUR, "")
$aMin = StringSplit(@MIN, "")
$aDay = StringSplit("SO.|MO.|DI.|MI.|DO.|FR.|SA.", "|")
$sTime = $aHour[1] & " " & $aHour[2] & " : " & $aMin[1] & " " & $aMin[2] & "#" & $aDay[@WDAY] & " " & @MDAY & "." & @MON & "." & @YEAR
GUICtrlSetData($idTime, $aHour[1] & " " & $aHour[2] & " : " & $aMin[1] & " " & $aMin[2])
GUICtrlSetData($idDate, $aDay[@WDAY] & " " & @MDAY & "." & @MON & "." & @YEAR)
_ScreenCapture_CaptureWnd($sCaptureFilePath, $hGUI)
_ChangeDestopWallpaper($sCaptureFilePath, 0)
FileDelete($sCaptureFilePath)
EndFunc
;===============================================================================
;
; Function Name: _ChangeDesktopWallPaper
; Description: Update WallPaper Settings
;Usage: _ChangeDesktopWallPaper(@WindowsDir & '\' & 'zapotec.bmp',1)
; Parameter(s): $bmp - Full Path to BitMap File (*.bmp)
; [$style] - 0 = Centered, 1 = Tiled, 2 = Stretched
; Requirement(s): None.
; Return Value(s): On Success - Returns 0
; On Failure - -1
; Author(s): FlyingBoz
;Thanks: Larry - DllCall Example - Tested and Working under XPHome and W2K Pro
; Excalibur - Reawakening my interest in Getting This done.
;
;===============================================================================
Func _ChangeDestopWallpaper($bmp, $style = 0)
If Not FileExists($bmp) Then Return -1
;The $SPI* values could be defined elsewhere via #include - if you conflict,
; remove these, or add if Not IsDeclared "SPI_SETDESKWALLPAPER" Logic
Local $SPI_SETDESKWALLPAPER = 20
Local $SPIF_UPDATEINIFILE = 1
Local $SPIF_SENDCHANGE = 2
Local $REG_DESKTOP= "HKEY_CURRENT_USER\Control Panel\Desktop"
if $style = 1 then
RegWrite($REG_DESKTOP, "TileWallPaper", "REG_SZ", 1)
RegWrite($REG_DESKTOP, "WallpaperStyle", "REG_SZ", 0)
Else
RegWrite($REG_DESKTOP, "TileWallPaper", "REG_SZ", 0)
RegWrite($REG_DESKTOP, "WallpaperStyle", "REG_SZ", $style)
EndIf
DllCall("user32.dll", "int", "SystemParametersInfo", _
"int", $SPI_SETDESKWALLPAPER, _
"int", 0, _
"str", $bmp, _
"int", BitOR($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE))
Return 0
EndFunc ;==>_ChangeDestopWallpaper
Alles anzeigen
Ist es alternativ vllt. mit GDI+ möglich Schrift über ein bestehendes BMP zu legen und das ganze wieder als BMP zu speichern?
Dann könnte ich den Blödsinn mit dem Screenshot ganz umgehn