#include #include #include #include #include #include #include #include #include #include #include #include Global $globalPictureFolder = "A:\Wallpapers" OnAutoItExitRegister("CloseProgramNoCheck") Opt("TrayMenuMode", 3) ;Disable default menu on tray icon Opt("TrayOnEventMode", 1) ; Enable alternative tray icon actions Global $keepLog = 1 Global $logFile = FileOpen(@WorkingDir & "\FSS Log.txt", 2) ;Overwrites previous contents of file Global $logFileLocation = @WorkingDir & "\FSS Log.txt" FileWrite($logFile, "Program Start" & @CRLF) FileWrite($logFile, "Time: " & _NowTime() & ", " & _NowDate() & @CRLF & @CRLF) _GDIPlus_Startup() ;Only allow one instance of the program to run. If _Singleton("Fullscreen Slideshow", 1) = 0 Then Exit EndIf Global $pictureFolder ;Fixes declared warning ;Settings ;==================================== ;Can be edited via external text file (FSS.txt) GetSettings() ;==================================== TrayIconMenu() Global $desktop, $prevImage0, $prevImage1, $prevImage2, $prevImage3, $prevImage4, $prevImage5 Global $ssTimerSet = 0 Global $countedImages = 0 Global $imageWasShown = 1 Global $hidden = 0 Global $VNChidden = 0 Global $LoopCount = 1 Global $RegistryLoopCount = 1 Global $taskbarActivationHide = 0 Global $imageList = _FileListToArray($pictureFolder) Global $imageCount = $imageList[0] Global $imageShown[$imageCount + 1] Global $resetCount = 0 Global $reset = 0 Global $changeImage = 0 Global Const $STM_SETIMAGE = 0x0172 Global $currActiveWindow = WinGetHandle("") Global $smImageChangeBlack = 0 Global $smImageWidth, $smImageHeight, $smpHeight, $smpWidth, $smCenterX, $smCenterY, _ $smPicName, $activeWindowPosition, $smRefreshImage, $smImageChangeTimer, $smSSMTimer, _ $startWithWindows, $closeWithScreensaver, $smPic, $smGdiPic, $position, $screensaverOnTimer Global $msImageWidth, $msImageHeight, $msHeight, $mspWidth, $msGdiPic, $msPic, $msCenterX, $msCenterY Global $pmImageWidth, $pmImageHeight, $pmpHeight, $pmpWidth, $pmCenterX, $pmCenterY, _ $pmPicName, $pmSSTimer, $pmPic, $pmGdiPic, $pmSSChangeTimer, $blinkTaskbar, $forceFSSOn, _ $hibernateWasOn, $readingSettings Global $pmGUIhandle, $smGUIhandle, $msGUIhandle, $captureError Global $changeQuadrant = ($ssChangePercent * 0.01) * ($ssRows * $ssColumns) Global $screenShotCount = $ssRows * $ssColumns Global $currentShot = 1 Global $incrementX = @DesktopWidth / $ssColumns Global $incrementY = @DesktopHeight / $ssRows Global $currentXpos, $currentYpos, $imageChangeResult Global $pmChangeImage = 1 Global $screenSaverIsOn = 0 Global $winSize[2] Global $hibernateMenuOR = 0 Global $screensaverMenuOR = 0 Global $pauseMenuOR = 0 ;Prevents CloseProgram() function on startup RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Close Program", "REG_SZ", 0) ;Preliminary setup - Creates GUI, displays 1 image ;==================================== GetImageForDisplaySM() GetImageForDisplayPM() CreateGUI() MoveGUIWindow() $smImageChangeTimer = TimerInit() ;Reset Image Change Timer $pmSSTimer = TimerInit() ;Reset Primary Screensaver Timer $pmSSChangeTimer = TimerInit() ;Reset Primary Screensaver Image Change Timer $pmSSOnTopTimer = TimerInit() ;Reset OnTop Timer ShowImageSM() ShowImagePM() ;Main Program ;==================================== While 1 ;Debug -- No longer needed with the inclusion of the log files ;~ ToolTip(CheckIfFSSshouldDisplay() & @CRLF & _ ;~ "Active: " & $activeWindowPosition[0] & ", " & $activeWindowPosition[1] & @CRLF & _ ;~ "Mouse: " & MouseGetPos(0) & ", " & MouseGetPos(1) & @CRLF & _ ;~ "Desktop: " & $desktop & @CRLF & _ ;~ "Monitor: " & @DesktopWidth & "x" & @DesktopHeight _ ;~ , 100, 5) ;====== ;~ Local $temp = _Timer_GetIdleTime() ;~ ToolTip("SS: " & $screenSaverIsOn & @CRLF & "Idle: " & $temp, 100, 5) ;========================== StartSecondaryMonitorWallpaper() ;These functions are set in settings (FSS.txt) ShowTrayIcon() ;Should Tray Icon be shown? StartWithWindows() ;Start program with Windows? (doesn't function) ;================ AlwaysOnTop() ;Force slideshow to be on top of other windows LoseFocus() ;Lose focus in case slideshow becomes the active window ;Should Fullscreen Slideshow be on or off If CheckIfFSSshouldDisplay() = "Show" Then ShowFSS() Else HideFSS() EndIf ScreensaverOperations() If _WinAPI_GetSystemMetrics(78) > @DesktopWidth Then ChangeImageSM() EndIf ChangeTrayToolTip() ;DisplayTaskbar() ;Moved to alternate keys for faster response CloseProgram() ;Only every 5 times LogProgram("Loop Count: " & $LoopCount) If $LoopCount > 5 Then $LoopCount = 1 ;Pre-cautionary in case of changes in Monitor dimensions (if secondary monitor is unplugged) MoveGUIWindow() ;Check settings for changes GetSettings() Else $LoopCount += 1 EndIf ;Only every 1000 times LogProgram("Registry Loop Count: " & $RegistryLoopCount) If $RegistryLoopCount > 1000000 Then ;Should only run every few hours $RegistryLoopCount = 1 ;Deletes old Registry entries in case of file changes RegDelete("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures") If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", "Exists") = "" Then LogProgram("Registry Deleted") Else LogProgram("Error Deleting Registry") EndIf RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", "Exists", "REG_SZ", 1) If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", "Exists") <> "" Then LogProgram("Registry Created") Else LogProgram("Error Creating Registry") CloseProgramNoCheck() EndIf Else $RegistryLoopCount += 1 EndIf LogProgram(@CRLF & "=========================================================================") Local $logFileSize = FileGetSize($logFileLocation) LogProgram("Log File Size: " & $logFileSize) If $logFileSize > 5242880 Then ;5 megabytes $logFile = FileOpen(@WorkingDir & "\FSS Log.txt", 2) ;Erases log file due to extreme size EndIf ;Allow CPU to rest Sleep(10) LogProgram("Time: " & _NowTime() & ", " & _NowDate() & @CRLF) WEnd ;Beginning of Functions ;==================================== Func GetSettings() $value = $globalPictureFolder LogProgram("Picture Folder: " & $value) $pictureFolder = $value $value = "Yes" LogProgram("Show Tray Icon: " & $value) Global $showIcon = $value $value = 1600 LogProgram("SM Width: " & $value) Global $smWidth = $value $value = 900 LogProgram("SM Height: " & $value) Global $smHeight = $value $value = "Right" LogProgram("SM Position: " & $value) Global $smPosition = $value $value = "Inactive" LogProgram("SM Activation Mode: " & $value) Global $smActivationMode = $value $value = 60 LogProgram("smSSM Seconds: " & $value) Global $smSSMsec = $value $smSSMsec = $smSSMsec * 1000 ;Convert to milliseconds $value = "Timer" LogProgram("SM Change Method: " & $value) Global $smChangeMethod = $value $value = 120 LogProgram("SM Image Change Seconds: " & $value) Global $smImageChangeSec = $value $smImageChangeSec = $smImageChangeSec * 1000 ;Convert to milliseconds $value = "Random No Repeat" LogProgram("SM Image Order: " & $value) Global $smImageOrder = $value $value = 40 LogProgram("Taskbar Size: " & $value) Global $taskbarSize = $value RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Taskbar Size", "REG_SZ", $value) $value = "No" LogProgram("Start with Windows: " & $value) Global $startWithWindows = $value $value = "Off" LogProgram("Screensaver: " & $value) Global $screensaverActivated = $value $value = 300 LogProgram("Screensaver Activation Seconds: " & $value) Global $pmSSActivationSec = $value $pmSSActivationSec = $pmSSActivationSec * 1000 ;Convert to milliseconds LogProgram("pm SS Activation Seconds: " & $value) $value = "Yes" LogProgram("Copy SM Image: " & $value) Global $pmSyncSMImage = $value $value = 60 LogProgram("Screensaver Image Change Seconds: " & $value) Global $pmSSChangeImageSec = $value $pmSSChangeImageSec = $pmSSChangeImageSec * 1000 ;Convert to milliseconds LogProgram("pm SS Change Image Seconds: " & $value) $value = 3 Global $taskbarBlinkSec = $value $taskbarBlinkSec = $taskbarBlinkSec * 1000 ;Convert to milliseconds LogProgram("Taskbar Blink Seconds: " & $value) $value = 3 LogProgram("Rows: " & $value) Global $ssRows = $value $value = 6 LogProgram("Columns: " & $value) Global $ssColumns = $value $value = 50 LogProgram("Change %: " & $value) Global $ssChangePercent = $value $value = 3 LogProgram("Check Count: " & $value) Global $ssCheckCount = $value $value = "No" LogProgram("monitorOff: " & $value) Global $monitorOff = $value $value = 20 LogProgram("monitorTime: " & $value) Global $monitorTime = $value $monitorTime = $monitorTime * 60000 ;Convert to minutes $value = "Off" LogProgram("hibernateMode: " & $value) Global $hibernateMode = $value $value = 60 LogProgram("hibernateTime: " & $value) Global $hibernateTime = $value $hibernateTime = $hibernateTime * 60000 ;Convert to minutes LogProgram("===End Get Settings===") EndFunc ;==>GetSettings Func GetImageForDisplaySM() LogProgram("===GetImageForDisplaySM===") Local $newPic = 0 Local $smhHBmp, $mshHBmp ;for GDI (secondary) Local $aspectRatioX, $aspectRatioY, $scaleFactor ;Check image folder for count change LogProgram("==GetImageForDisplaySM calling CheckForImageChanges==") CheckForImageChanges() ;Throw away value to prevent error with GetDimensions $pmPicName = Random(1, $imageCount, 1) ;Secondary Monitor ;Images should go in order by file LogProgram("Image Order: " & $smImageOrder) If $smImageOrder = "Ordered" Then ;Counted Images default is 0 $countedImages += 1 ;If the the counted images surpasses the number of images that are there, then reset the count If $countedImages > $imageCount Then $countedImages = 1 EndIf $smPicName = $countedImages ;Select a random image from the list ElseIf $smImageOrder = "Random" Then ;Select a random image from the list $smPicName = Random(1, $imageCount, 1) ;Select a random image, but do not show the same image twice Else ;$smImageOrder = "Random No Repeat" If $reset = 1 Then $reset = 0 $resetCount = 0 For $x = 1 To $imageCount Step +1 $imageShown[$x] = "" Next EndIf While $newPic <> 1 $smPicName = Random(1, $imageCount, 1) ;Pick a random image ;Check if image has been shown For $y = 1 To $imageCount Step +1 If $smPicName = $imageShown[$y] Then $imageWasShown = 1 EndIf Next ;y If $imageWasShown = 1 Then $imageWasShown = 0 $newPic = 0 Else $newPic = 1 $resetCount += 1 EndIf If $resetCount = $imageCount Then $reset = 1 EndIf WEnd ;Save image to shown image list ;Store name in next available empty slot For $x = 1 To $imageCount Step +1 If $imageShown[$x] = "" Then $imageShown[$x] = $smPicName ;Save image to shown image list ExitLoop ;End loop early EndIf Next EndIf LogProgram("(SM) Selected Image SM: " & $imageList[$smPicName]) LogProgram("(SM - Throw Away)Selected Image PM: " & $imageList[$pmPicName]) ;Save Image to Previous Image List $prevImage5 = $prevImage4 $prevImage4 = $prevImage3 $prevImage3 = $prevImage2 $prevImage2 = $prevImage1 $prevImage1 = $prevImage0 $prevImage0 = $imageList[$smPicName] ;Get Dimensions of image LogProgram("==GetImageForDisplaySM calling GetDimensions==") GetDimensions($imageList[$smPicName], $imageList[$pmPicName]) $smImageHeight = $smpHeight $smImageWidth = $smpWidth ;Turn them all into integers. (Fixes glitch that caused some images to skip resizing) $smImageHeight = Int($smImageHeight) $smImageWidth = Int($smImageWidth) $smHeight = Int($smHeight) $smWidth = Int($smWidth) LogProgram("Pre-Adjust") LogProgram("smImageWidth: " & $smImageWidth) LogProgram("smImageHeight: " & $smImageHeight) LogProgram("smWidth: " & $smWidth) LogProgram("smHeight: " & $smHeight) ;Adjust the image size (Secondary) ;----------------------------------------------- ;If the image is bigger than the screen, adjust it If $smImageWidth > $smWidth = 1 Or $smImageHeight > $smHeight = 1 Then ;Calculate Aspect Ratio of image $aspectRatioX = $smWidth / $smImageWidth $aspectRatioY = $smHeight / $smImageHeight LogProgram("aspectRatioX: " & $aspectRatioX) LogProgram("aspectRatioY: " & $aspectRatioY) If $aspectRatioX < $aspectRatioY Then $scaleFactor = $aspectRatioX Else $scaleFactor = $aspectRatioY EndIf LogProgram("scaleFactor: " & $scaleFactor) $smImageHeight = $smImageHeight * $scaleFactor $smImageWidth = $smImageWidth * $scaleFactor LogProgram("New smImageWidth: " & $smImageWidth) LogProgram("New smImageHeight: " & $smImageHeight) Else LogProgram("Image is smaller/same size as monitor") EndIf ;Adjust the image size (Mini) ;----------------------------------------------- ;Calculate Aspect Ratio of image $aspectRatioX = 200 / $smImageWidth $aspectRatioY = 200 / $smImageHeight LogProgram("aspectRatioX: " & $aspectRatioX) LogProgram("aspectRatioY: " & $aspectRatioY) If $aspectRatioX < $aspectRatioY Then $scaleFactor = $aspectRatioX Else $scaleFactor = $aspectRatioY EndIf LogProgram("scaleFactor: " & $scaleFactor) $msImageHeight = $smImageHeight * $scaleFactor $msImageWidth = $smImageWidth * $scaleFactor LogProgram("New msImageWidth: " & $msImageWidth) LogProgram("New msImageHeight: " & $msImageHeight) ;Calculate Center of monitor ;(Monitor size - image size) / 2 $smCenterX = ($smWidth - $smImageWidth) / 2 $smCenterY = ($smHeight - $smImageHeight) / 2 LogProgram("smCenterX: " & $smCenterX) LogProgram("smCenterY: " & $smCenterY) ;Resize the image (Secondary) LogProgram("Resize Image SM") $smhHBmp = $pictureFolder & "\" & $imageList[$smPicName] LogProgram("smhBmp: " & $smhHBmp) $smGdiPic = _GDIPlus_BitmapCreateFromFile($smhHBmp) ;convert GDI bitmap to GDI+ bitmap LogProgram("smGdiPic: " & $smGdiPic) _GDIPlus_BitmapDispose($smPic) $smPic = _GDIPlus_ImageResize($smGdiPic, $smImageWidth, $smImageHeight) ;resize image _GDIPlus_BitmapDispose($smGdiPic) LogProgram("smPic: " & $smPic) ;Calculate Mini Center ;(Monitor size - image size) / 2 $msCenterX = (200 - $msImageWidth) / 2 $msCenterY = (200 - $msImageHeight) / 2 LogProgram("msCenterX: " & $msCenterX) LogProgram("msCenterY: " & $msCenterY) ;Resize the image (Mini) LogProgram("Resize Image MS") $mshHBmp = $pictureFolder & "\" & $imageList[$smPicName] LogProgram("mshBmp: " & $mshHBmp) $msGdiPic = _GDIPlus_BitmapCreateFromFile($mshHBmp) ;convert GDI bitmap to GDI+ bitmap LogProgram("msGdiPic: " & $msGdiPic) _GDIPlus_BitmapDispose($msPic) $msPic = _GDIPlus_ImageResize($msGdiPic, $msImageWidth, $msImageHeight) ;resize image _GDIPlus_BitmapDispose($msGdiPic) LogProgram("msPic: " & $msPic) LogProgram("===End GetImageForDisplaySM===") EndFunc ;==>GetImageForDisplaySM Func GetImageForDisplayPM() LogProgram("===GetImageForDisplayPM===") Local $newPic = 0 Local $pmhHBmp ;for GDI (primary) Local $aspectRatioX, $aspectRatioY, $scaleFactor ;Check image folder for count change LogProgram("==GetImageForDisplayPM calling CheckForImageChanges==") CheckForImageChanges() If $pmChangeImage = 1 Then $pmChangeImage = 0 $pmPicName = Random(1, $imageCount, 1) ;Select a random image from the list for primary EndIf LogProgram("(PM - Throw Away) Selected Image SM: " & $imageList[$smPicName]) LogProgram("(PM)Selected Image PM: " & $imageList[$pmPicName]) ;Get Dimensions of image LogProgram("==GetImageForDisplayPM calling GetDimensions==") GetDimensions($imageList[$smPicName], $imageList[$pmPicName]) $pmImageHeight = $pmpHeight $pmImageWidth = $pmpWidth ;Turn them all into integers. (Fixes glitch that caused some images to skip resizing) $pmImageHeight = Int($pmImageHeight) $pmImageWidth = Int($pmImageWidth) LogProgram("Pre-Adjust") LogProgram("pmImageWidth: " & $pmImageWidth) LogProgram("pmImageHeight: " & $pmImageHeight) LogProgram("pmWidth: " & @DesktopWidth) LogProgram("pmHeight: " & @DesktopHeight) ;Adjust the image size ;----------------------------------------------- ;If the image is bigger than the screen, adjust it If $pmImageWidth > @DesktopWidth Or $pmImageHeight > @DesktopHeight Then ;Calculate Aspect Ratio of image $aspectRatioX = @DesktopWidth / $pmImageWidth $aspectRatioY = @DesktopHeight / $pmImageHeight LogProgram("aspectRatioX: " & $aspectRatioX) LogProgram("aspectRatioY: " & $aspectRatioY) If $aspectRatioX < $aspectRatioY Then $scaleFactor = $aspectRatioX Else $scaleFactor = $aspectRatioY EndIf $pmImageHeight = $pmImageHeight * $scaleFactor $pmImageWidth = $pmImageWidth * $scaleFactor LogProgram("New pmImageWidth: " & $pmImageWidth) LogProgram("New pmImageHeight: " & $pmImageHeight) Else LogProgram("Image is smaller/same size as monitor") EndIf ;Calculate Center of monitor ;(Monitor size - image size) / 2 $pmCenterX = (@DesktopWidth - $pmImageWidth) / 2 $pmCenterY = (@DesktopHeight - $pmImageHeight) / 2 LogProgram("pmCenterX: " & $pmCenterX) LogProgram("pmCenterY: " & $pmCenterY) ;Resize the image LogProgram("Resize Image PM") $pmhHBmp = $pictureFolder & "\" & $imageList[$pmPicName] LogProgram("pmhHBmp: " & $pmhHBmp) $pmGdiPic = _GDIPlus_BitmapCreateFromFile($pmhHBmp) ;convert GDI bitmap to GDI+ bitmap LogProgram("pmGdiPic: " & $pmGdiPic) _GDIPlus_BitmapDispose($pmPic) $pmPic = _GDIPlus_ImageResize($pmGdiPic, $pmImageWidth, $pmImageHeight) ;resize image _GDIPlus_BitmapDispose($pmGdiPic) LogProgram("Resized pmPic: " & $pmPic) LogProgram("===End GetImageForDisplayPM===") EndFunc ;==>GetImageForDisplayPM Func GetDimensions($smPicName, $pmPicName) LogProgram("===GetDimensions===") Local $prop, $dArray, $fileSize, $imageDimensionsGDI ;Secondary Monitor LogProgram("-Secondary Monitor-") $path = $pictureFolder & "\" & $smPicName LogProgram("Path: " & $path) $fileSize = FileGetSize($path) LogProgram("File Size: " & $fileSize) LogProgram("Registry Size: " & RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Size")) ;Save information to registry for faster access. Compare size of picture to verify changes to picture If $fileSize <> RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Size") Then LogProgram("File Sizes Do Not Match") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Size", "REG_SZ", $fileSize) $imageDimensionsGDI = _GDIPlus_ImageLoadFromFile($path) $smpWidth = _GDIPlus_ImageGetWidth($imageDimensionsGDI) $smpHeight = _GDIPlus_ImageGetHeight($imageDimensionsGDI) _GDIPlus_ImageDispose($imageDimensionsGDI) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Width", "REG_SZ", $smpWidth) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Height", "REG_SZ", $smpHeight) Else LogProgram("File Sizes Match") $smpWidth = RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Width") $smpHeight = RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Height") If $smpWidth = "-1" Or $smpHeight = "-1" Then LogProgram("Correcting Saved Dimensions") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Size", "REG_SZ", $fileSize) $imageDimensionsGDI = _GDIPlus_ImageLoadFromFile($path) $smpWidth = _GDIPlus_ImageGetWidth($imageDimensionsGDI) $smpHeight = _GDIPlus_ImageGetHeight($imageDimensionsGDI) _GDIPlus_ImageDispose($imageDimensionsGDI) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Width", "REG_SZ", $smpWidth) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $smPicName & " Height", "REG_SZ", $smpHeight) EndIf EndIf LogProgram("smpWidth: " & $smpWidth) LogProgram("smpHeight: " & $smpHeight) ;Primary Monitor LogProgram("-Primary Monitor-") $path = $pictureFolder & "\" & $pmPicName LogProgram("Path: " & $path) $fileSize = FileGetSize($path) LogProgram("File Size: " & $fileSize) LogProgram("Registry Size: " & RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Size")) ;Save information to registry for faster access. Compare size of picture to verify changes to picture If $fileSize <> RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Size") Then LogProgram("File Sizes Do Not Match") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Size", "REG_SZ", $fileSize) $imageDimensionsGDI = _GDIPlus_ImageLoadFromFile($path) $pmpWidth = _GDIPlus_ImageGetWidth($imageDimensionsGDI) $pmpHeight = _GDIPlus_ImageGetHeight($imageDimensionsGDI) _GDIPlus_ImageDispose($imageDimensionsGDI) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Width", "REG_SZ", $pmpWidth) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Height", "REG_SZ", $pmpHeight) Else LogProgram("File Sizes Match") $pmpWidth = RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Width") $pmpHeight = RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Height") If $pmpWidth = "-1" Or $pmpHeight = "-1" Then LogProgram("Correcting Saved Dimensions") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Size", "REG_SZ", $fileSize) $imageDimensionsGDI = _GDIPlus_ImageLoadFromFile($path) $pmpWidth = _GDIPlus_ImageGetWidth($imageDimensionsGDI) $pmpHeight = _GDIPlus_ImageGetHeight($imageDimensionsGDI) _GDIPlus_ImageDispose($imageDimensionsGDI) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Width", "REG_SZ", $pmpWidth) RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow\Pictures", $pmPicName & " Height", "REG_SZ", $pmpHeight) EndIf EndIf LogProgram("pmpWidth: " & $pmpWidth) LogProgram("pmpHeight: " & $pmpHeight) LogProgram("===End GetDimensions===") EndFunc ;==>GetDimensions Func CheckForImageChanges() LogProgram("===CheckForImageChanges===") Local $newCount = _FileListToArray($pictureFolder) LogProgram("Old Count: " & $imageCount) LogProgram("New Count: " & $newCount[0]) If $newCount[0] <> $imageCount Then LogProgram("New Images Found") $imageList = _FileListToArray($pictureFolder) $imageCount = $imageList[0] ReDim $imageShown[$imageCount + 1] Else LogProgram("No New Images") EndIf LogProgram("===End CheckForImageChanges===") EndFunc ;==>CheckForImageChanges Func CreateGUI() LogProgram("===CreateGUI===") ;Hidden GUI for fixing if FSS becomes the active window GUICreate("FSS", 0, 0, 0, 0) LogProgram("FSS created") ;Parent, for window border hide effect $GUIHide = GUICreate("hide", 0, 0, 0, 0) LogProgram("hide created") ;Actual GUI to be used ;Slideshow GUI If $smPosition = "Right" Then Global $smGUI = GUICreate("Fullscreen Slideshow", $smWidth, $smHeight, @DesktopWidth, 0, BitOR($WS_POPUP, $WS_EX_TOPMOST), $WS_EX_TOOLWINDOW, $GUIHide) ;GUI is the size of the secondary screen Else Global $smGUI = GUICreate("Fullscreen Slideshow", $smWidth, $smHeight, (-1 * @DesktopWidth), 0, BitOR($WS_POPUP, $WS_EX_TOPMOST), $WS_EX_TOOLWINDOW, $GUIHide) ;GUI is the size of the secondary screen EndIf LogProgram("Fullscreen Slideshow created") $smGUIhandle = WinGetHandle("Fullscreen Slideshow", "") GUICtrlSetPos($smPic, $smCenterX, $smCenterY) GUISetBkColor(0, $smGUIhandle) LogProgram("smGUIhandle: " & $smGUIhandle) LogProgram("Show smGUI") GUISetState(@SW_SHOW, $smGUIhandle) ;Show SM GUI ;Mini Slideshow GUI Global $msGUI = GUICreate("Mini Slideshow", 200, 200, 1710, 250, BitOR($WS_POPUP, $WS_EX_TOPMOST), $WS_EX_TOOLWINDOW, $GUIHide) ;GUI is 200x200 pixels LogProgram("Mini Slideshow created") $msGUIhandle = WinGetHandle("Mini Slideshow", "") LogProgram("msGUIhandle: " & $msGUIhandle) GUISetBkColor(0, $msGUIhandle) LogProgram("Hide msGUI") GUISetState(@SW_HIDE, $msGUIhandle) ;Hide MS GUI ;Screensaver GUI Global $pmGUI = GUICreate("Fullscreen Screensaver", @DesktopWidth, @DesktopHeight, 0, 0, BitOR($WS_POPUP, $WS_EX_TOPMOST), -1, $GUIHide) ;GUI is the size of the primary screen LogProgram("Fullscreen Screensaver created") $pmGUIhandle = WinGetHandle("Fullscreen Screensaver", "") LogProgram("pmGUIhandle: " & $pmGUIhandle) GUICtrlSetPos($pmPic, $pmCenterX, $pmCenterY) GUISetBkColor(0, $pmGUIhandle) LogProgram("Hide pmGUI") GUISetState(@SW_HIDE, $pmGUIhandle) ;Hide PM GUI LogProgram("===End CreateGUI===") EndFunc ;==>CreateGUI Func MoveGUIWindow() LogProgram("===MoveGUIWindow===") LogProgram("SM Position: " & $smPosition) ;Move GUI according to location of secondary monitor ;$position = WinGetPos("Fullscreen Slideshow") If $smPosition = "Left" Then ;If $position[0] <> (-1 * $smWidth) Or $position[1] <> $smHeight Then WinMove("Fullscreen Slideshow", "", (-1 * $smWidth), 0, $smWidth, $smHeight) LogProgram("Moved: " & - 1 * $smWidth & ", " & "0") ;EndIf Else ;Monitor on Right ;If $position[0] <> @DesktopWidth Or $position[1] <> $smHeight Then WinMove("Fullscreen Slideshow", "", @DesktopWidth, 0, $smWidth, $smHeight) LogProgram("Moved: " & @DesktopWidth & ", " & "0") ;EndIf EndIf WinMove("Fullscreen Screensaver", "", 0, 0, @DesktopWidth, @DesktopHeight) WinMove("Mini Slideshow", "", 1710, 250, 200, 200, 0) LogProgram("===End MoveGUIWindow===") EndFunc ;==>MoveGUIWindow Func ShowImageSM() LogProgram("===ShowImageSM===") LogProgram("smImageChangeBlack: " & $smImageChangeBlack) If $smImageChangeBlack = 0 Then Local $smhGraphics = _GDIPlus_GraphicsCreateFromHWND($smGUI) ;create a graphics object from a window handle _GDIPlus_GraphicsDrawImage($smhGraphics, $smPic, $smCenterX, $smCenterY) ;display scaled image LogProgram("smhGraphics: " & $smhGraphics) LogProgram("smPic: " & $smPic) If $smPic = 0 Then MsgBox(0, "Secondary Monitor", "zero error") Exit EndIf LogProgram("smCenterX: " & $smCenterX) LogProgram("smCenterY: " & $smCenterY) _GDIPlus_GraphicsDispose($smhGraphics) EndIf LogProgram("===End ShowImageSM===") LogProgram("==ShowImageSM calling ShowImageMS==") ShowImageMS() EndFunc ;==>ShowImageSM Func ShowImageMS() LogProgram("===ShowImageMS===") Local $mshGraphics = _GDIPlus_GraphicsCreateFromHWND($msGUI) ;create a graphics object from a window handle _GDIPlus_GraphicsDrawImage($mshGraphics, $msPic, $msCenterX, $msCenterY) ;display scaled image LogProgram("mshGraphics: " & $mshGraphics) LogProgram("msPic: " & $msPic) If $msPic = 0 Then MsgBox(0, "Mini Slideshow", "zero error") Exit EndIf LogProgram("msCenterX: " & $msCenterX) LogProgram("msCenterY: " & $msCenterY) _GDIPlus_GraphicsDispose($mshGraphics) LogProgram("===End ShowImageMS===") EndFunc ;==>ShowImageMS Func ShowImagePM() LogProgram("===ShowImagePM===") Local $pmhGraphics = _GDIPlus_GraphicsCreateFromHWND($pmGUI) ;create a graphics object from a window handle _GDIPlus_GraphicsDrawImage($pmhGraphics, $pmPic, $pmCenterX, $pmCenterY) ;display scaled image LogProgram("pmhGraphics: " & $pmhGraphics) LogProgram("pmPic: " & $pmPic) LogProgram("pmCenterX: " & $pmCenterX) LogProgram("pmCenterY: " & $pmCenterY) LogProgram("===End ShowImagePM===") EndFunc ;==>ShowImagePM Func ShowTrayIcon() LogProgram("===ShowTrayIcon===") If $showIcon = "No" Then LogProgram("No") AutoItSetOption("TrayIconHide", 1) Else LogProgram("Yes") AutoItSetOption("TrayIconHide", 0) EndIf LogProgram("===End ShowTrayIcon===") EndFunc ;==>ShowTrayIcon Func StartWithWindows() LogProgram("===StartWithWindows===") If $startWithWindows = "Yes" Then LogProgram("Yes") If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Fullscreen Slideshow") = "" Then RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Fullscreen Slideshow", "REG_SZ", '"' & @ScriptFullPath & '"') EndIf Else LogProgram("No") If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Fullscreen Slideshow") <> "" Then RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "Fullscreen Slideshow") EndIf EndIf LogProgram("===End StartWithWindows===") EndFunc ;==>StartWithWindows Func AlwaysOnTop() LogProgram("===AlwaysOnTop===") ;Always keep FSS on top of other windows WinSetOnTop("Fullscreen Slideshow", "", 0) WinSetOnTop("Fullscreen Slideshow", "", 1) ;Only every 30 seconds (prevents constant fighting with rainmeter) If TimerDiff($pmSSOnTopTimer) > 30000 Then WinSetOnTop("Fullscreen Screensaver", "", 0) WinSetOnTop("Fullscreen Screensaver", "", 1) $pmSSOnTopTimer = TimerInit() ;Reset OnTop Timer EndIf LogProgram("===End AlwaysOnTop===") EndFunc ;==>AlwaysOnTop Func LoseFocus() LogProgram("===LoseFocus===") ;If Fullscreen Slideshow becomes the active window, change to FSS If WinActive("Fullscreen Slideshow", "") <> 0 Then WinActivate("FSS", "") EndIf LogProgram("===End LoseFocus===") EndFunc ;==>LoseFocus Func CheckIfFSSshouldDisplay() LogProgram("===CheckIfFSSshouldDisplay===") Local $decided = 0 Local $returnValue ;Is selected window the Desktop? $winSize = WinGetClientSize("") LogProgram("Window Size: " & $winSize) If $winSize = "" Then ;Prevents non-accessible glitch $desktop = 0 Else If $winSize[0] = @DesktopWidth + $smWidth Then ;Desktop $desktop = 1 Else $desktop = 0 EndIf EndIf LogProgram("Desktop Selected?: " & $desktop) ;Where is the active window $activeWindowPosition = WinGetPos("[ACTIVE]") LogProgram("Active Window Position: " & $activeWindowPosition[0]) If $smPosition = "Left" Then If $activeWindowPosition[0] < 0 Then ;If Active Window is in monitor on left If $desktop = 0 Then $decided = 1 $returnValue = "Hide" LogProgram("Active Window: On Left") LogProgram("Return: " & $returnValue) Else $returnValue = "Show" LogProgram("Active Window: On Right") LogProgram("Return: " & $returnValue) EndIf EndIf Else ;$smPosition = "Right" If $activeWindowPosition[0] > (@DesktopWidth - 1) Or _ ;If Active Window is in monitor on right $activeWindowPosition[0] = (@DesktopWidth - 8) Then ;If Active Window is fullscreen If $desktop = 0 Then $decided = 1 $returnValue = "Hide" LogProgram("Active Window: On Right") LogProgram("Return: " & $returnValue) Else $returnValue = "Show" LogProgram("Active Window: On Left") LogProgram("Return: " & $returnValue) EndIf EndIf EndIf ;Only check if undecided If $decided = 0 Then ;Where is the mouse located LogProgram("Mouse Position: " & MouseGetPos(0) & ", " & MouseGetPos(1)) If $smPosition = "Left" Then If MouseGetPos(0) < 0 Then ;If mouse is in monitor on left $decided = 1 $returnValue = "Hide" LogProgram("Mouse Position: On Left") LogProgram("Return: " & $returnValue) EndIf Else ;$smPosition = "Right" If MouseGetPos(0) > @DesktopWidth Then ;If mouse is in monitor on right ;Bottom right corner of SM is activation spot If MouseGetPos(0) > (@DesktopWidth + $smWidth) - 3 Then If MouseGetPos(1) > $smHeight - 3 Then LogProgram("Mouse Activation Position") LogProgram("Return: " & $returnValue) $decided = 1 $returnValue = "Show" Else $decided = 1 $returnValue = "Hide" LogProgram("Mouse Position: On Right") LogProgram("Return: " & $returnValue) EndIf Else $decided = 1 $returnValue = "Hide" LogProgram("Mouse Position: On Right") LogProgram("Return: " & $returnValue) EndIf EndIf EndIf If $decided = 0 Then ;Is there a special Window that is active? $mPos = _WinAPI_GetMousePos() $hwnd = _WinAPI_WindowFromPoint($mPos) ;Is VNC active? If WinGetTitle($hwnd) = "Cursor Hider" Then LogProgram("Cursor Hider Active") $decided = 1 ;Temporary while VNC is in main window ;$returnValue = "Hide" $returnValue = "Show" LogProgram("Return: " & $returnValue) EndIf EndIf EndIf ;Is the Toggle set to hide? ;Is Screensaver Off? LogProgram("forceFSSOn: " & $forceFSSOn) If $forceFSSOn = 0 Then If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Mode") = "Hide" Then ;Get new image ready while hidden CleanupPrevImageSM() GetImageForDisplaySM() ShowImageSM() ;Hide GUI $decided = 1 $returnValue = "Hide" LogProgram("Return: " & $returnValue) EndIf Else $returnValue = "Show" ;Screensaver is active EndIf ;If no issues, then show If $decided = 0 Then $returnValue = "Show" LogProgram("Return: " & $returnValue) EndIf Return $returnValue LogProgram("===End CheckIfFSSshouldDisplay=" & @CRLF) EndFunc ;==>CheckIfFSSshouldDisplay Func ShowFSS() LogProgram("===ShowFSS===") LogProgram("smActvationMode: " & $smActivationMode) If $smActivationMode = "Inactive" Then ;Monitor not in use WinSetState("Mini Slideshow", "", @SW_HIDE) WinSetState("Fullscreen Slideshow", "", @SW_SHOW) Else ;$smActivationMode = "Timer" (Screensaver mode) If TimerDiff($smSSMTimer) > ($smSSMsec) Then WinSetState("Mini Slideshow", "", @SW_HIDE) WinSetState("Fullscreen Slideshow", "", @SW_SHOW) EndIf EndIf ;Redraw GDI LogProgram("==ShowFSS calling ShowImageSM==") ShowImageSM() ShowImagePM() LogProgram("===End ShowFSS===") EndFunc ;==>ShowFSS Func HideFSS() LogProgram("===HideFSS===") WinSetState("Fullscreen Slideshow", "", @SW_HIDE) WinSetState("Mini Slideshow", "", @SW_SHOW) $smRefreshImage = 1 $smSSMTimer = TimerInit() ;Reset Screensaver Timer LogProgram("===End HideFSS===") EndFunc ;==>HideFSS Func ChangeImageSM() LogProgram("===ChangeImageSM===") LogProgram("$miPause: " & $miPause) If $pauseMenuOR = 0 Then ;If not paused If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Mode") <> "Monitor Off" Then $smImageChangeBlack = 0 LogProgram("smImageChangeBlack: " & $smImageChangeBlack) LogProgram("changeMethod: " & $smChangeMethod) If $smChangeMethod = "Refresh" Then If $smRefreshImage = 1 Then $smRefreshImage = 0 CleanupPrevImageSM() GetImageForDisplaySM() ShowImageSM() GUISetState(@SW_SHOW, $smGUIhandle) EndIf Else ;$smChangeMethod = "Timer" If TimerDiff($smImageChangeTimer) > $smImageChangeSec Then $smImageChangeTimer = TimerInit() ;Reset Image Change Timer GetImageForDisplaySM() CleanupPrevImageSM() ShowImageSM() GUISetState(@SW_SHOW, $smGUIhandle) EndIf EndIf Else ;Use Black Image If $smImageChangeBlack = 0 Then $smImageChangeBlack = 1 CleanupPrevImageSM() GUISetState(@SW_SHOW, $smGUIhandle) EndIf EndIf EndIf LogProgram("===End ChangeImageSM===") EndFunc ;==>ChangeImageSM Func CleanupPrevImageSM() LogProgram("===CleanupPrevImageSM===") GUISetBkColor(0, $smGUIhandle) ;Draw black over previous image LogProgram("===End CleanupPrevImageSM===") EndFunc ;==>CleanupPrevImageSM Func CleanupPrevImagePM() LogProgram("===CleanupPrevImagePM===") GUISetBkColor(0, $pmGUIhandle) ;Draw black over previous image LogProgram("===End CleanupPrevImagePM===") EndFunc ;==>CleanupPrevImagePM Func DisplayTaskbar() LogProgram("===DisplayTaskbar===") ;Hide/Show Taskbar If MouseGetPos(0) > 0 And MouseGetPos(0) < @DesktopWidth Then ;If mouse is in main monitor If MouseGetPos(1) > (@DesktopHeight - 2) Then ;If mouse is at bottom of screen LogProgram("==DisplayTaskbar calling ShowTaskbar==") ShowTaskbar() ElseIf MouseGetPos(1) < (@DesktopHeight - $taskbarSize) Then ;If mouse leaves taskbar area If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Blink Taskbar") = 0 Then HideTaskbar() EndIf Else If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Blink Taskbar") = 0 Then HideTaskbar() EndIf LogProgram("===End DisplayTaskbar===") EndFunc ;==>DisplayTaskbar Func HideTaskbar() LogProgram("===HideTaskbar===") ControlHide('', '', WinGetHandle("[CLASS:Shell_TrayWnd]")) ControlHide('', '', WinGetHandle("[CLASS:Button]")) LogProgram("===End HideTaskbar===") EndFunc ;==>HideTaskbar Func ShowTaskbar() LogProgram("===ShowTaskbar===") ControlShow('', '', WinGetHandle("[CLASS:Shell_TrayWnd]")) ControlShow('', '', WinGetHandle("[CLASS:Button]")) LogProgram("===End ShowTaskbar===") EndFunc ;==>ShowTaskbar Func CloseProgram() LogProgram("===CloseProgram===") If RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Close Program") = 1 Then RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Close Program", "REG_SZ", 0) LogProgram("==CloseProgram calling CleanupPrevImageSM==") CleanupPrevImageSM() LogProgram("==CloseProgram calling CleanupPrevImagePM==") CleanupPrevImagePM() LogProgram("GDI Dispose") _GDIPlus_GraphicsDispose($smGdiPic) _GDIPlus_BitmapDispose($smPic) _GDIPlus_GraphicsDispose($pmGdiPic) _GDIPlus_BitmapDispose($pmPic) LogProgram("GDI Shutdown") _GDIPlus_Shutdown() LogProgram("GUI Delete") GUIDelete($smGUI) GUIDelete($pmGUI) LogProgram("Program Closed" & @CRLF) FileClose($logFile) Exit EndIf LogProgram("Program Not Closed") LogProgram("===End CloseProgram===") EndFunc ;==>CloseProgram Func CloseProgramNoCheck() LogProgram("===CloseProgramNoCheck===") LogProgram("==CloseProgram calling CleanupPrevImageSM==") CleanupPrevImageSM() LogProgram("==CloseProgram calling CleanupPrevImagePM==") CleanupPrevImagePM() LogProgram("GDI Dispose") _GDIPlus_GraphicsDispose($smGdiPic) _GDIPlus_BitmapDispose($smPic) _GDIPlus_GraphicsDispose($pmGdiPic) _GDIPlus_BitmapDispose($pmPic) LogProgram("GDI Shutdown") _GDIPlus_Shutdown() LogProgram("GUI Delete") GUIDelete($smGUI) GUIDelete($pmGUI) LogProgram("Program Closed" & @CRLF) Exit EndFunc ;==>CloseProgramNoCheck Func ScreensaverOperations() Local $x, $y LogProgram("===ScreensaverOperations===") LogProgram("screensaverMenuOR: " & $screensaverMenuOR) If $screensaverMenuOR = 0 Then Local $forceScreensaverOn = RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Force Screensaver On") LogProgram("ForceScreensaverOn: " & $forceScreensaverOn) Local $checkCount, $stop LogProgram("Screensaver Activated? " & $screensaverActivated) LogProgram("Is Screensaver On? " & $screenSaverIsOn) If $screensaverActivated = "On" Then ;Should Screensaver be activated? Local $idleTime = _Timer_GetIdleTime() LogProgram("Idle Time Seconds: " & ($idleTime / 1000)) LogProgram("Activation Seconds: " & ($pmSSActivationSec / 1000)) If $idleTime > $pmSSActivationSec Then If $screenSaverIsOn = 0 Then LogProgram("==ScreensaverOperations calling CaptureScreen==") CaptureScreen() ;Take a screenshot of entire screen (divided into sections) Sleep(1000) ;Give time for screenshots to load into hard drive $checkCount = 1 $stop = 0 While $stop = 0 LogProgram("stop: " & $stop) LogProgram("==ScreensaverOperations calling CompareScreen==") $imageChangeResult = CompareScreen() ;Compare screenshots with current desktop LogProgram("result: " & $imageChangeResult) If $imageChangeResult = "Not Changed" Then $checkCount += 1 If $checkCount > $ssCheckCount Then ;Check x times before giving up $stop = 1 Else Sleep(2000) ;Wait 2 seconds before checking again EndIf Else $stop = 1 EndIf Sleep(50) WEnd LogProgram("Check for fullscreen application") ;Check for fullscreen application Local $fullscreenDetected = 0 $fullscreenDetected = 1 LogProgram("Fullscreen Detected: " & $fullscreenDetected) If $fullscreenDetected = 0 Then If $imageChangeResult = "Not Changed" Then LogProgram("==ScreensaverOperations calling ShowScreensaver==") ShowScreensaver() ElseIf $imageChangeResult = "Changed" Then LogProgram("Screen has changed") LogProgram("==ScreensaverOperations calling CheckForDesktop==") If CheckForDesktop() = 1 Then ;If Desktop is taking over screen, turn on screensaver anyway ShowScreensaver() Else ;The screen is changing, but the desktop is not active LogProgram("Screen changing, but desktop not active") ;Reset Timer (to prevent constant checking) LogProgram("==ScreensaverOperations calling ResetIdle==") ResetIdle() EndIf ;CheckForDesktop Else ;something is wrong with $imageChangeResult LogProgram("Error in $imageChangeResult") LogProgram("$imageChangeResult: " & $imageChangeResult) MsgBox(0, "Error in $imageChangeResult", "$imageChangeResult showing invalid variable: " & "'" & $imageChangeResult & "'" & @CRLF & "Closing Program") Exit EndIf ;$imageChangeResult Else ;Fullscreen Detected = 1 LogProgram("Fullscreen Detected") ;Reset Timer (to prevent constant checking) LogProgram("==ScreensaverOperations calling ResetIdle==") ResetIdle() LogProgram("Fullscreen Detected, skipping Screensaver") EndIf ;Erase screenshots LogProgram("==ScreensaverOperations calling ScreensaverCleanUp==") ScreensaverCleanUp() Else ;If $screenSaverIsOn <> 0 Then ;Monitor Off Function If $monitorOff = "Yes" Then If TimerDiff($screensaverOnTimer) > $monitorTime Then ;Turn off Monitor. Will reactivate itself on idle reset DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', WinGetHandle('[CLASS:Progman]'), 'int', 274, 'int', 61808, 'int', 2) EndIf ;TimerDiff EndIf ;monitor off ;Sleep Function If $hibernateMode = "On" Then If $hibernateMenuOR = 0 Then If TimerDiff($screensaverOnTimer) > $hibernateTime Then LogProgram("Putting Computer into hibernation") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Standby", "REG_SZ", 1) Shutdown(64) ;Hibernate EndIf EndIf EndIf EndIf ;If $screenSaverIsOn = 0 Else ;If $idleTime !> $pmSSActivationSec If $forceScreensaverOn = 0 Then LogProgram("==ScreensaverOperations calling HideScreensaver==") HideScreensaver() Else ;If $forceScreensaverOn <> 0 Then If $idleTime < 5000 Then LogProgram("RegWrite Force Screensaver On: 0") RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Force Screensaver On", "REG_SZ", 0) $forceScreensaverOn = 0 LogProgram("==ScreensaverOperations calling Hidescreensaver==") HideScreensaver() Else ;If $idleTime !< 5000 Then If $screenSaverIsOn = 0 Then LogProgram("==ScreensaverOperations calling ShowScreensaver==") ShowScreensaver() Else ;If $screenSaverIsOn <> 0 Then ;Sleep Function If $hibernateMode = "On" Then If TimerDiff($screensaverOnTimer) > $hibernateTime Then LogProgram("Putting Computer into hibernation") Shutdown(64) ;Hibernate EndIf EndIf EndIf EndIf EndIf EndIf ;=================== ;Change Image? If $screenSaverIsOn = 1 Then If TimerDiff($pmSSChangeTimer) > $pmSSChangeImageSec Then $pmChangeImage = 1 LogProgram("==ScreensaverOperations calling CleanupPrevImagePM==") CleanupPrevImagePM() LogProgram("==ScreensaverOperations calling GetImageForDisplayPM==") GetImageForDisplayPM() LogProgram("==ScreensaverOperations calling ShowImagePM==") ShowImagePM() LogProgram("Show GUI: $pmGUIhandle") GUISetState(@SW_SHOW, $pmGUIhandle) $pmSSChangeTimer = TimerInit() ;Reset Image Change Timer EndIf EndIf ;=================== ;If $screensaverActivated = "Off" do nothing EndIf EndIf ;screensaver menu override LogProgram("===End ScreensaverOperations===") EndFunc ;==>ScreensaverOperations Func ShowScreensaver() LogProgram("===ShowScreensaver===") LogProgram("Run ScreensaverIsOn.exe") Run("A:\Autoit Scripts\ScreensaverIsOn.exe") ;For use with Logitech/Razer keyboard profiles $forceScreensaverOn = 1 RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Force Screensaver On", "REG_SZ", 1) LogProgram("$forceScreensaverOn: " & $forceScreensaverOn) LogProgram("Sleep 5 seconds") Sleep(5000) ;Logitech keyboard causes idle to end, this prevents that. $screensaverOnTimer = TimerInit() LogProgram("Screensaver Timer started at " & _NowTime()) ControlHide('', '', WinGetHandle("[CLASS:Shell_TrayWnd]")) ControlHide('', '', WinGetHandle("[CLASS:Button]")) $blinkTaskbar = 1 RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "BlinkTaskbar", "REG_SZ", 1) WinSetState("Fullscreen Screensaver", "", @SW_SHOW) _WinAPI_ShowCursor("False") $screenSaverIsOn = 1 $forceFSSOn = 1 LogProgram("===End ShowScreensaver===") EndFunc ;==>ShowScreensaver Func HideScreensaver() LogProgram("===HideScreensaver===") ProcessClose("ScreensaverIsOn.exe") ;For use with Logitech keyboard profiles WinSetState("Fullscreen Screensaver", "", @SW_HIDE) _WinAPI_ShowCursor("True") $screensaverOnTimer = TimerInit() LogProgram("ScreensaverOnTimer Reset") $screenSaverIsOn = 0 $forceFSSOn = 0 If $blinkTaskbar = 1 Then $blinkTaskbar = 0 ;For blink taskbar seconds ControlShow('', '', WinGetHandle("[CLASS:Shell_TrayWnd]")) ControlShow('', '', WinGetHandle("[CLASS:Button]")) ;sleep 1 second ;Next Sleep($taskbarBlinkSec) EndIf RegWrite("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "BlinkTaskbar", "REG_SZ", 0) LogProgram("===End HideScreensaver===") EndFunc ;==>HideScreensaver Func CaptureScreen() LogProgram("===CaptureScreen===") $currentShot = 1 LogProgram("ssRows: " & $ssRows) LogProgram("ssColumns: " & $ssColumns) LogProgram("currentShot: " & $currentShot) ;Vertical For $currentYpos = 0 To $ssRows - 1 Step +1 LogProgram("currentYpos: " & $currentYpos) ;Horizontal For $currentXpos = 0 To $ssColumns - 1 Step +1 LogProgram("currentXpos: " & $currentXpos) _ScreenCapture_Capture(@WorkingDir & "\Screensaver\screensaver " & $currentShot & ".bmp", _ ($incrementX * $currentXpos), _ ($incrementY * $currentYpos), _ ($incrementX * ($currentXpos + 1)), _ $incrementY * ($currentYpos + 1), 0) If FileExists(@WorkingDir & "\Screensaver\screensaver " & $currentShot & ".bmp") = 1 Then LogProgram("screensaver " & $currentShot & ".bmp saved") Else LogProgram("screensaver " & $currentShot & ".bmp save error") $captureError = 1 EndIf $currentShot += 1 LogProgram("currentShot: " & $currentShot) Sleep(50) Next ;x Sleep(50) Next ;y ;If there is a capture error, retry once If $captureError = 1 Then LogProgram("Attempt 2") $captureError = 0 $currentShot = 1 LogProgram("ssRows: " & $ssRows) LogProgram("ssColumns: " & $ssColumns) LogProgram("currentShot: " & $currentShot) ;Vertical For $currentYpos = 0 To $ssRows - 1 Step +1 LogProgram("currentYpos: " & $currentYpos) ;Horizontal For $currentXpos = 0 To $ssColumns - 1 Step +1 LogProgram("currentXpos: " & $currentXpos) _ScreenCapture_Capture(@WorkingDir & "\Screensaver\screensaver " & $currentShot & ".bmp", _ ($incrementX * $currentXpos), _ ($incrementY * $currentYpos), _ ($incrementX * ($currentXpos + 1)), _ $incrementY * ($currentYpos + 1), 0) If FileExists(@WorkingDir & "\Screensaver\screensaver " & $currentShot & ".bmp") = 1 Then LogProgram("screensaver " & $currentShot & ".bmp saved") Else LogProgram("screensaver " & $currentShot & ".bmp save error") $captureError = 1 EndIf $currentShot += 1 LogProgram("currentShot: " & $currentShot) Sleep(50) Next ;x Sleep(50) Next ;y EndIf LogProgram("===End CaptureScreen=" & @CRLF) EndFunc ;==>CaptureScreen Func CompareScreen() Return "Changed" EndFunc ;==>CompareScreen Func CheckForDesktop() $desktopFound = 1 EndFunc ;==>CheckForDesktop Func ScreensaverCleanUp() LogProgram("===ScreensaverCleanup===") Local $file Local $picCount = $ssRows * $ssColumns For $file = 1 To $picCount Step +1 FileDelete(@WorkingDir & "\Screensaver\screensaver " & $file & ".bmp") If FileExists(@WorkingDir & "\Screensaver\screensaver " & $file & ".bmp") = 1 Then LogProgram("screensaver " & $file & ".bmp delete error") Else LogProgram("screensaver " & $file & ".bmp deleted") EndIf Next LogProgram("===End ScreensaverCleanup===") EndFunc ;==>ScreensaverCleanUp Func ChangeTrayToolTip() If $smImageChangeBlack = 1 Then TraySetToolTip("FSS: Black") ElseIf RegRead("HKEY_CURRENT_USER\Software\Fullscreen Slideshow", "Mode") = "Hide" Then TraySetToolTip("FSS: Hidden") Else TraySetToolTip("FSS: " & $imageList[$smPicName]) EndIf EndFunc ;==>ChangeTrayToolTip Func LogProgram($sentence) If $keepLog = 1 Then ConsoleWrite($sentence & @CRLF) FileWrite($logFile, $sentence & @CRLF) EndIf EndFunc ;==>LogProgram Func StartSecondaryMonitorWallpaper() EndFunc ;==>StartSecondaryMonitorWallpaper Func ResetIdle() LogProgram("Send CLEAR Key") _WinAPI_Keybd_Event(0x0C, $KEYEVENTF_EXTENDEDKEY) ;Sends CLEAR key. Has no function in Windows, resets idle. LogProgram("CLEAR Key sent") EndFunc ;==>ResetIdle Func TrayIconMenu() TrayCreateItem("Open Pic") TrayItemSetOnEvent(-1, "OpenImage") Global $prevImageMenu = TrayCreateMenu("Open Previous Images") TrayCreateItem("Image 1 (Newest)", $prevImageMenu) TrayItemSetOnEvent(-1, "OpenPrevImage1") TrayCreateItem("Image 2", $prevImageMenu) TrayItemSetOnEvent(-1, "OpenPrevImage2") TrayCreateItem("Image 3", $prevImageMenu) TrayItemSetOnEvent(-1, "OpenPrevImage3") TrayCreateItem("Image 4", $prevImageMenu) TrayItemSetOnEvent(-1, "OpenPrevImage4") TrayCreateItem("Image 5 (Oldest)", $prevImageMenu) TrayItemSetOnEvent(-1, "OpenPrevImage5") Global $miPause = TrayCreateItem("Pause") TrayItemSetOnEvent(-1, "PauseSlideshow") Global $settingsMenu = TrayCreateMenu("Settings") Global $miScreensaver = TrayCreateItem("Screensaver: " & $screensaverActivated, $settingsMenu) TrayItemSetOnEvent(-1, "ScreensaverToggle") Global $miHibernate = TrayCreateItem("Hibernate: " & $hibernateMode, $settingsMenu) If $screensaverActivated = "Off" Then TrayItemSetState($miHibernate, 128) ;Disable Hibernate Option EndIf TrayItemSetOnEvent(-1, "HibernateToggle") TrayCreateItem("Open FSS Settings File", $settingsMenu) TrayItemSetOnEvent(-1, "openFSSFile") TrayCreateItem("") ; Create a separator line. TrayCreateItem("Exit") TrayItemSetOnEvent(-1, "CloseProgramNoCheck") EndFunc ;==>TrayIconMenu Func OpenImage() Run(@WindowsDir & '\System32\rundll32.exe "' & @ProgramFilesDir & '\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen ' & $pictureFolder & "\" & $imageList[$smPicName]) EndFunc ;==>OpenImage Func OpenPrevImage1() If $prevImage1 <> "" Then Run(@WindowsDir & '\System32\rundll32.exe "' & @ProgramFilesDir & '\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen ' & $pictureFolder & "\" & $prevImage1) EndIf EndFunc ;==>OpenPrevImage1 Func OpenPrevImage2() If $prevImage2 <> "" Then Run(@WindowsDir & '\System32\rundll32.exe "' & @ProgramFilesDir & '\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen ' & $pictureFolder & "\" & $prevImage2) EndIf EndFunc ;==>OpenPrevImage2 Func OpenPrevImage3() If $prevImage3 <> "" Then Run(@WindowsDir & '\System32\rundll32.exe "' & @ProgramFilesDir & '\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen ' & $pictureFolder & "\" & $prevImage3) EndIf EndFunc ;==>OpenPrevImage3 Func OpenPrevImage4() If $prevImage4 <> "" Then Run(@WindowsDir & '\System32\rundll32.exe "' & @ProgramFilesDir & '\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen ' & $pictureFolder & "\" & $prevImage4) EndIf EndFunc ;==>OpenPrevImage4 Func OpenPrevImage5() If $prevImage5 <> "" Then Run(@WindowsDir & '\System32\rundll32.exe "' & @ProgramFilesDir & '\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen ' & $pictureFolder & "\" & $prevImage5) EndIf EndFunc ;==>OpenPrevImage5 Func PauseSlideshow() If $pauseMenuOR = 0 Then $pauseMenuOR = 1 TrayItemSetText($miPause, "Unpause") TraySetIcon(@WorkingDir & "\Icons\Monitor - Paused.ico") Else $pauseMenuOR = 0 TrayItemSetText($miPause, "Pause") TraySetIcon(@WorkingDir & "\Icons\Monitor.ico") EndIf EndFunc ;==>PauseSlideshow Func ScreensaverToggle() LogProgram("ScreensaverToggle") If $screensaverMenuOR = 0 Then $screensaverMenuOR = 1 ;Hibernate contained inside screensaver operation If $hibernateMode = "On" Then $hibernateMenuOR = 1 $hibernateWasOn = 1 If $readingSettings = 1 Then ;Prevents crash due to changing file while being read Sleep(1000) EndIf _ReplaceStringInFile(@ScriptDir & "\FSS.txt", "Hibernate (On, Off) = On", "Hibernate (On, Off) = Off") TrayItemSetText($miHibernate, "Hibernate: Off") TrayItemSetState($miHibernate, 128) ;Disable Hibernate Option Else $hibernateWasOn = 0 EndIf ;Change FSS file If $readingSettings = 1 Then ;Prevents crash due to changing file while being read Sleep(1000) EndIf _ReplaceStringInFile(@ScriptDir & "\FSS.txt", "Screensaver (On, Off) = On", "Screensaver (On, Off) = Off") TrayItemSetText($miScreensaver, "Screensaver: Off") Else $screensaverMenuOR = 0 TrayItemSetText($miScreensaver, "Screensaver: On") TrayItemSetState($miHibernate, 64) ;Enable Hibernate Option ;Change FSS file If $readingSettings = 1 Then ;Prevents crash due to changing file while being read Sleep(1000) EndIf _ReplaceStringInFile(@ScriptDir & "\FSS.txt", "Screensaver (On, Off) = Off", "Screensaver (On, Off) = On") If $hibernateWasOn = 1 Then If $readingSettings = 1 Then ;Prevents crash due to changing file while being read Sleep(1000) EndIf _ReplaceStringInFile(@ScriptDir & "\FSS.txt", "Hibernate (On, Off) = Off", "Hibernate (On, Off) = On") TrayItemSetText($miHibernate, "Hibernate: On") EndIf EndIf EndFunc ;==>ScreensaverToggle Func hibernateToggle() LogProgram("HibernateToggle") If $hibernateMenuOR = 0 Then $hibernateMenuOR = 1 ;Change FSS file If $readingSettings = 1 Then ;Prevents crash due to changing file while being read Sleep(1000) EndIf _ReplaceStringInFile(@ScriptDir & "\FSS.txt", "Hibernate (On, Off) = On", "Hibernate (On, Off) = Off") TrayItemSetText($miHibernate, "Hibernate: Off") Else $hibernateMenuOR = 0 ;Change FSS file If $readingSettings = 1 Then ;Prevents crash due to changing file while being read Sleep(1000) EndIf _ReplaceStringInFile(@ScriptDir & "\FSS.txt", "Hibernate (On, Off) = Off", "Hibernate (On, Off) = On") TrayItemSetText($miHibernate, "Hibernate: On") EndIf EndFunc ;==>hibernateToggle Func OpenFSSFile() ShellExecute(@ScriptDir & "\FSS.txt") EndFunc ;==>OpenFSSFile