#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=icons\rtcshare_exe_Ico7_ico_Ico1.ico #AutoIt3Wrapper_Outfile=relocate.exe #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_UseX64=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ; ================================================================================================================ ; LANGUAGE OPTIONS Opt("TrayMenuMode",3) AutoItSetOption("MustDeclareVars", 0) ; ================================================================================================================ ; INCLUDES (update as needed) #Include #include #include #include ; ================================================================================================================ ; DUPLICATE INSTANCE CHECK (may need to remove or move this around depending on where it is needed) If UBound(ProcessList(@ScriptName)) > 2 Then Exit ; ================================================================================================================ ; SCRIPT IDENTITY (this is based on the filename of the script/executable) $sAppDesc = "Hotkey util to move active windows around faster using [WIN]+numpad keys" $sAppName = "Relocate" $sAppAuthor = "Sean Shrum" $sAppVersion = "2.05" $sAppEmail = StringLower($sAppName)& "@shrum.net" $sAppHome = "http://www.shrum.net/cats.php?dir=/sean/code/" & StringLower($sAppName) $sAppNews = $sAppHome & "/updates.html" $sAppSupport = $sAppHome & "/support.html" $sAppFileType ="." & StringLower($sAppName) $aAppBuild = FileGetTime(@ScriptFullPath) $sAppBuild = $aAppBuild[0] & "." & $aAppBuild[1] & "." & $aAppBuild[2] & " @ " & $aAppBuild[3] & ":" & $aAppBuild[4] & ":" & $aAppBuild[5] $sAppTitle = $sAppName & " v." & $sAppVersion $sAppSettings = "HKCU\software\shrum.net\" & $sAppName ; ================================================================================================================ ; VARIABLE DECLARATIONS / DEFAULTS Global $bDebug=False, $bVerbose="" Global $dll = DllOpen("user32.dll"), $aDisplays, $aActiveWinPosition, $aActiveDisplay, $bMaximized, $sActiveWinTitle, $fActiveWinCenterX ; ================================================================================================================ ; TRAY ICON AND TOOLTIP SET (looks for .ico in same folder as .exe otherwise uses the build icon) TraySetToolTip($sAppTitle) TraySetIcon($sAppName & ".ico") ; ================================================================================================================ ; SPLASH SCREEN / TRAYTIP BUBBLE (*only* if no command line params are present: automated run/batch call) if $CmdLine[0] = 0 Then Traytip($sAppTitle,$sAppDesc,5) ; ================================================================================================================ ; REGISTRY UPDATES (location, version, runcount) $iRunCount = RegRead($sAppSettings, "Executed") RegWrite($sAppSettings, "Executed", "REG_SZ", $iRunCount + 1) RegWrite($sAppSettings, "", "REG_SZ", @Scriptdir) RegWrite($sAppSettings, "Version", "REG_SZ", $sAppVersion) ; ================================================================================================================ ; PROGRAM GROUP / SHORTCUTS CREATION (fires only when Executed reg value = "" from above) If $iRunCount = "" Then DirCreate(@ProgramsCommonDir & "\shrum.net\" & $sAppName) FileCreateShortcut(@ScriptFullPath, @ProgramsCommonDir & "\shrum.net\" & $sAppName & "\" & $sAppName & ".lnk") FileCreateShortcut($sAppHome, @ProgramsCommonDir & "\shrum.net\" & $sAppName & "\Homepage.lnk") FileCreateShortcut($sAppSupport, @ProgramsCommonDir & "\shrum.net\" & $sAppName & "\Support.lnk") FileCreateShortcut(@ScriptFullPath, @UserProfileDir & "\application data\microsoft\Internet Explorer\Quick Launch\" & $sAppName & ".lnk") EndIf ; ================================================================================================================ ; SYSTRAY MENU DEFINITIONS (if any) TrayCreateItem ("[ Project ]") $mAbout = TrayCreateItem ("...About") TrayItemSetState (-1, $TRAY_DEFAULT) $mUpdate = TrayCreateItem ("...Update") $mNews = TrayCreateItem ("...News") $mSupport = TrayCreateItem ("...Support") $mDebug = TrayCreateItem ("...Debug") $mExit = TrayCreateItem ("...Exit") TraySetState () TraySetClick (16) ; ================================================================================================================ ; LAST RUN SETTINGS LOAD _SettingsLoad() ; ================================================================================================================ ; COMMAND-LINE / .INI EVALUATION ; N/A ; ================================================================================================================ ; ARGUMENT CHECKS / PROMPTS ; N/A ; ================================================================================================================ ; SETTINGS SAVE (all user passed params should be formatted to program-desired formats by this point) _SettingsSave() ; ================================================================================================================ ; HOTKEY DEFINITIONS (if any) _HotkeysSet() ; ================================================================================================================ ; DEBUG WINDOW (notepad; if requested) if $bDebug then _DebugSetup() ; ================================================================================================================ ; MAIN PROGRAM $aDisplays = _MonitorInfo() $iEnabled = $aDisplays[0][0] For $i = 1 to $aDisplays[0][0] if $aDisplays[$i][3] = "0" Then $iEnabled = $iEnabled - 1 Next TrayTip($sAppTitle,$iEnabled & " enabled outputs found" & @CRLF & "Primary click icon for hotkey listing" & @CRLF & "Secondary click icon for popup menu",5) sleep(5000) TrayTip("","",0) While 1 _MenuMonitor() WEnd ; ================================================================================================================ ; FUNCTIONS Func _AboutDialog() _ConsoleWrite("+ _AboutDialog()") $iResult = msgbox(4,"About", $sAppTitle & " ( build " & $sAppBuild & " )" & @CRLF & @CRLF & _ $sAppDesc & @CRLF & @CRLF & _ "Would you like to visit the " & $sAppName & " web site for more information about this utility?") If $iResult = 6 Then ShellExecute($sAppHome) _ConsoleWrite("- _AboutDialog()") EndFunc func _AppINIRead($sSetting) $sTemp = IniRead($sAppName & ".ini", @ComputerName, $sSetting, "") if $sTemp = "" Then $sTemp = IniRead($sAppName & ".ini", "Default", $sSetting, "") return $sTemp EndFunc func _ConsoleWrite($sMsg) _DebugOut($sMsg) Consolewrite($sMsg & @CRLF) EndFunc Func _BottomLeft() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1],($aActiveDisplay[2] + $aActiveDisplay[4])/2,$aActiveDisplay[3]/2,$aActiveDisplay[4]/2) EndFunc Func _BottomHalf() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1],($aActiveDisplay[2] + $aActiveDisplay[4])/2,$aActiveDisplay[3],$aActiveDisplay[4]/2) EndFunc func _BottomRight() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1] + ($aActiveDisplay[3]/2),($aActiveDisplay[2] + $aActiveDisplay[4])/2,$aActiveDisplay[3]/2,$aActiveDisplay[4]/2) EndFunc Func _DefineSetting($sSetting="", $sValue="") _consolewrite("+ _DefineSetting()") _ConsoleWrite(": Setting '" & $sSetting & "' = '" & $sValue & "'") Switch $sSetting case "Debug" if $sValue then $bDebug = $sValue Else if not $bDebug then $bDebug = True Else $bDebug = False EndIf endif if $bDebug Then _DebugSetup($sAppTitle & " - debugging info") _ConsoleWrite("Debug console :: " & $sAppTitle & " :: build " & $sAppBuild) _ConsoleWrite("========================[ START ]=============================") opt("TrayIconDebug",1) TrayItemSetState($mDebug,1) Else _ConsoleWrite("=========================[ END ]==============================") opt("TrayIconDebug",0) TraySetToolTip($sAppTitle) TrayItemSetState($mDebug,4) EndIf EndSwitch _consolewrite("- _DefineSetting()") EndFunc Func _Exit() _ConsoleWrite("+ _Exit()") _SettingsSave() DllClose($dll) Exit EndFunc func _HotkeysSet() _ConsoleWrite("+ _HotkeysSet()") HotKeySet("#{LEFT}", "_Relocate") HotKeySet("#{RIGHT}", "_Relocate") HotKeySet("#{DOWN}", "_Relocate") HotKeySet("#{UP}", "_Relocate") HotKeySet("#{HOME}", "_Relocate") HotKeySet("#{PGUP}", "_Relocate") HotKeySet("#{PGDN}", "_Relocate") HotKeySet("#{END}", "_Relocate") for $i = 1 to 9 HotKeySet("#{NUMPAD" & $i & "}", "_Relocate") next _ConsoleWrite("- _HotkeysSet()") EndFunc Func _LeftHalf() _ConsoleWrite($aActiveWinPosition[0] & "=" & $aActiveDisplay[1] & " | " & $aActiveWinPosition[1] & "=" & $aActiveDisplay[2] & " | " & $aActiveWinPosition[2] & "=" & $aActiveDisplay[3]/2 & " | " & $aActiveWinPosition[3] & "=" & $aActiveDisplay[4]) if $aActiveWinPosition[0] = $aActiveDisplay[1] AND $aActiveWinPosition[1] = $aActiveDisplay[2] AND $aActiveWinPosition[2] = $aActiveDisplay[3]/2 AND $aActiveWinPosition[3] = $aActiveDisplay[4] Then _ConsoleWrite("Move to the next display to the LEFT") for $i = 1 to $aDisplays[0][0] if $aDisplays[$i][1] = $aActiveDisplay[1] - $aDisplays[$i][3] Then $aActiveDisplay[1] = $aDisplays[$i][1] $aActiveDisplay[2] = $aDisplays[$i][2] $aActiveDisplay[3] = $aDisplays[$i][3] $aActiveDisplay[4] = $aDisplays[$i][4] ExitLoop EndIf Next if ($fActiveWinCenterX > $aActiveDisplay[1]) AND ($fActiveWinCenterX < $aActiveDisplay[1] + $aActiveDisplay[3]) Then _ConsoleWrite("Currently on far LEFT display. Shifting to far RIGHT display") for $i = 1 to $aDisplays[0][0] if $aDisplays[$i][1] > $aActiveDisplay[1] + $aActiveDisplay[3] Then $aActiveDisplay[1] = $aDisplays[$i][1] $aActiveDisplay[2] = $aDisplays[$i][2] $aActiveDisplay[3] = $aDisplays[$i][3] $aActiveDisplay[4] = $aDisplays[$i][4] EndIf Next EndIf WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1],$aActiveDisplay[2],$aActiveDisplay[3]/2,$aActiveDisplay[4]) WinSetState($sActiveWinTitle,"",@SW_MAXIMIZE) Else if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1],$aActiveDisplay[2],$aActiveDisplay[3]/2,$aActiveDisplay[4]) EndIf EndFunc func _MenuMonitor() $msg = TrayGetMsg () Select Case $msg = $TRAY_EVENT_PRIMARYDOWN _ConsoleWrite("+ _MenuMonitor($TRAY_EVENT_PRIMARYDOWN)") _AboutDialog() Case $msg = $mAbout _ConsoleWrite("+ _MenuMonitor($mAbout)") _AboutDialog() Case $msg = $mDebug _ConsoleWrite("+ _MenuMonitor($mDebug)") _DefineSetting("Debug", Not $bDebug) case $msg = $mUpdate _ConsoleWrite("+ _MenuMonitor($mUpdate)") _UpdateCheck() case $msg = $mSupport _ConsoleWrite("+ _MenuMonitor($mSupport)") _ShellExecute($sAppSupport) case $msg = $mNews _ConsoleWrite("+ _MenuMonitor($mNews)") _ShellExecute($sAppNews) case $msg = $mExit _ConsoleWrite("+ _MenuMonitor($mExit)") _Exit() EndSelect EndFunc Func _MonitorInfo() Const $ENUM_CURRENT_SETTINGS = -1 Const $ENUM_REGISTRY_SETTINGS = -2 Const $MONITORINFO = "int;int[4];int[4];int" Const $DISPLAY_DEVICE = "int;char[32];char[128];int;char[128];char[128]" Const $DEVMODE = "byte[32];short;short;short;short;int;int[2];int;int;short;short;short;short;short;byte[32];short;ushort;int;int;int;int" $DISPLAY_DEVICE_MIRRORING_DRIVER = "" $dll = DllOpen("user32.dll") Dim $aMonitorInfo[1][5] $dev = 0 $id = 0 $msg = "" Dim $dd = DllStructCreate($DISPLAY_DEVICE) DllStructSetData($dd, 1, DllStructGetSize($dd)) $EnumDisplays = DllCall($dll, "int", "EnumDisplayDevices", "ptr", 0, "int", $dev, "ptr", DllStructGetPtr($dd), "int", 0) $StateFlag = Number(StringMid(Hex(DllStructGetData($dd, 4)), 3)) ;;msgbox(1,"Enumdisplays", $EnumDisplays[0]) ;;Exit While $EnumDisplays[0] <> 0 If ($StateFlag <> $DISPLAY_DEVICE_MIRRORING_DRIVER) And ($StateFlag <> 0) Then Dim $dm = DllStructCreate($DEVMODE) DllStructSetData($dm, 4, DllStructGetSize($dm)) $EnumDisplaysEx = DllCall($dll, "int", "EnumDisplaySettingsEx", "str", DllStructGetData($dd, 2), "int", $ENUM_CURRENT_SETTINGS, "ptr", DllStructGetPtr($dm), "int", 0) If $EnumDisplaysEx[0] = 0 Then DllCall($dll, "int", "EnumDisplaySettingsEx", "str", DllStructGetData($dd, 2), "int", $ENUM_REGISTRY_SETTINGS, "ptr", DllStructGetPtr($dm), "int", 0) EndIf Dim $hm Dim $mi = DllStructCreate($MONITORINFO) DllStructSetData($mi, 1, DllStructGetSize($mi)) If Mod($StateFlag, 2) <> 0 Then $hm = DllCall($dll, "hwnd", "MonitorFromPoint", "int", DllStructGetData($dm, 7, 1), "int", DllStructGetData($dm, 7, 2), "int", 0) If $hm[0] <> 0 Then DllCall($dll, "int", "GetMonitorInfo", "hwnd", $hm[0], "ptr", DllStructGetPtr($mi)) $id += 1 ReDim $aMonitorInfo[$id+1][5] $aMonitorInfo[$id][0] = Number(Hex($hm[0])) $msg &= "Display "& $id & " #=" & $aMonitorInfo[$id][0] & @CRLF $aMonitorInfo[$id][1] = number(DllStructGetData($mi, 3, 1)) $msg &= "Display "& $id & " x=" & $aMonitorInfo[$id][1] & @CRLF $aMonitorInfo[$id][2] = Number(DllStructGetData($mi, 3, 2)) $msg &= "Display "& $id & " y=" & $aMonitorInfo[$id][2] & @CRLF $aMonitorInfo[$id][3] = Number(DllStructGetData($mi, 3, 3) - $aMonitorInfo[$id][1]) $msg &= "Display "& $id & " w=" & $aMonitorInfo[$id][3] & @CRLF $aMonitorInfo[$id][4] = Number(DllStructGetData($mi, 3, 4) - $aMonitorInfo[$id][2]) $msg &= "Display "& $id & " h=" & $aMonitorInfo[$id][4] & @CRLF & @CRLF EndIf EndIf EndIf $dev += 1 $EnumDisplays = DllCall($dll, "int", "EnumDisplayDevices", "ptr", 0, "int", $dev, "ptr", DllStructGetPtr($dd), "int", 0) $StateFlag = Number(StringMid(Hex(DllStructGetData($dd, 4)), 3)) WEnd $aMonitorInfo[0][0] = $id $dd = 0 $dm = 0 $mi = 0 DllClose($dll) _ConsoleWrite($msg) Return $aMonitorInfo EndFunc func _Relocate() $aDisplays = _MonitorInfo() $ActiveWinHandle = WinGetHandle("") $sActiveWinTitle = WinGetTitle($ActiveWinHandle) If $sActiveWinTitle = "Start Menu" Then Return $aActiveWinPosition = WinGetPos($sActiveWinTitle) $msg = "" For $i = 1 to $aDisplays[0][0] $msg = $msg & "Display " & $i & " #=" & $aDisplays[$i][0] & @CRLF $msg = $msg & "Display " & $i & " x=" & $aDisplays[$i][1] & @CRLF $msg = $msg & "Display " & $i & " y=" & $aDisplays[$i][2] & @CRLF $msg = $msg & "Display " & $i & " w=" & $aDisplays[$i][3] & @CRLF $msg = $msg & "Display " & $i & " h=" & $aDisplays[$i][4] & @CRLF & @CRLF Next $ActiveWinState = WinGetState($ActiveWinHandle) $bMaximized = False If BitAND($ActiveWinState, 32) Then $bMaximized = True $fActiveWinCenterX = $aActiveWinPosition[2]/2 + $aActiveWinPosition[0] $msg = $msg & "Active window title=" & $sActiveWinTitle & @CRLF $msg = $msg & "Active window x=" & $aActiveWinPosition[0] & @CRLF $msg = $msg & "Active window y=" & $aActiveWinPosition[1] & @CRLF $msg = $msg & "Active window w=" & $aActiveWinPosition[2] & @CRLF $msg = $msg & "Active window h=" & $aActiveWinPosition[3] & @CRLF $msg = $msg & "Active window maximized=" & $bMaximized & @CRLF $msg = $msg & "Active window X-Center=" & $fActiveWinCenterX & @CRLF & @CRLF for $i = 1 to $aDisplays[0][0] if ($fActiveWinCenterX > $aDisplays[$i][1]) AND ($fActiveWinCenterX < ($aDisplays[$i][1] + $aDisplays[$i][3])) Then dim $aActiveDisplay[5] $aActiveDisplay[0] = 4 $aActiveDisplay[1] = $aDisplays[$i][1] $msg = $msg & "Active display x=" & $aActiveDisplay[1] & @CRLF $aActiveDisplay[2] = $aDisplays[$i][2] $msg = $msg & "Active display y=" & $aActiveDisplay[2] & @CRLF $aActiveDisplay[3] = $aDisplays[$i][3] $msg = $msg & "Active display w=" & $aActiveDisplay[3] & @CRLF $aActiveDisplay[4] = $aDisplays[$i][4] $msg = $msg & "Active display h=" & $aActiveDisplay[4] & @CRLF ExitLoop EndIf Next _ConsoleWrite($msg) Select case (@HotKeyPressed = "#{numpad1}") Or (@HotKeyPressed = "#{end}") _BottomLeft() case (@HotKeyPressed = "#{numpad2}") Or (@HotKeyPressed = "#{down}") _BottomHalf() case (@HotKeyPressed = "#{numpad3}") Or (@HotKeyPressed = "#{pgdn}") _BottomRight() case (@HotKeyPressed = "#{numpad4}") Or (@HotKeyPressed = "#{left}") _LeftHalf() case (@HotKeyPressed = "#{numpad5}") Or (@HotKeyPressed = "#x") _ToggleState() case (@HotKeyPressed = "#{numpad6}") Or (@HotKeyPressed = "#{right}") _RightHalf() case (@HotKeyPressed = "#{numpad7}") Or (@HotKeyPressed = "#{home}") _TopLeft() case (@HotKeyPressed = "#{numpad8}") Or (@HotKeyPressed = "#{up}") _TopHalf() case (@HotKeyPressed = "#{numpad9}") Or (@HotKeyPressed = "#{pgup}") _TopRight() EndSelect EndFunc Func _RightHalf() _ConsoleWrite($aActiveWinPosition[0] & "=" & $aActiveDisplay[1] + ($aActiveDisplay[3]/2) & " | " & $aActiveWinPosition[1] & "=" & $aActiveDisplay[2] & " | " & $aActiveWinPosition[2] & "=" & $aActiveDisplay[3]/2 & " | " & $aActiveWinPosition[3] & "=" & $aActiveDisplay[4]) if $aActiveWinPosition[0] = $aActiveDisplay[1] + ($aActiveDisplay[3]/2) AND $aActiveWinPosition[1] = $aActiveDisplay[2] AND $aActiveWinPosition[2] = $aActiveDisplay[3]/2 AND $aActiveWinPosition[3] = $aActiveDisplay[4] Then _ConsoleWrite("Moving to the next display to the RIGHT") for $i = 1 to $aDisplays[0][0] if $aDisplays[$i][1] = $aActiveDisplay[1] + $aActiveDisplay[3] Then $aActiveDisplay[1] = $aDisplays[$i][1] $aActiveDisplay[2] = $aDisplays[$i][2] $aActiveDisplay[3] = $aDisplays[$i][3] $aActiveDisplay[4] = $aDisplays[$i][4] ExitLoop EndIf Next if ($fActiveWinCenterX > $aActiveDisplay[1]) AND ($fActiveWinCenterX < $aActiveDisplay[1] + $aActiveDisplay[3]) Then _ConsoleWrite("Currently on far RIGHT display. Shifting to far LEFT display") for $i = 1 to $aDisplays[0][0] if $aDisplays[$i][1] < $aActiveDisplay[1] Then $aActiveDisplay[1] = $aDisplays[$i][1] $aActiveDisplay[2] = $aDisplays[$i][2] $aActiveDisplay[3] = $aDisplays[$i][3] $aActiveDisplay[4] = $aDisplays[$i][4] EndIf Next EndIf WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1] + ($aActiveDisplay[3]/2),$aActiveDisplay[2],$aActiveDisplay[3]/2,$aActiveDisplay[4]) WinSetState($sActiveWinTitle,"",@SW_MAXIMIZE) Else if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1] + ($aActiveDisplay[3]/2),$aActiveDisplay[2],$aActiveDisplay[3]/2,$aActiveDisplay[4]) EndIf EndFunc Func _SettingsLoad() _ConsoleWrite("+ _SettingsLoad()") ;~ ****** ;~ $bVerbose = RegRead($sAppSettings, "Verbose") _ConsoleWrite("- _SettingsLoad()") EndFunc Func _SettingsSave() _ConsoleWrite("+ _SettingsSave()") ;~ ****** ;~ Regwrite($sAppSettings, "Verbose", "REG_SZ", $bVerbose) _ConsoleWrite("- _SettingsSave()") EndFunc Func _ShellExecute($sCmd) _ConsoleWrite("+ _ShellExecute()") if $sCmd = "" Then _ConsoleWrite(": No command passed") Else _ConsoleWrite(": Running '" & $sCmd & "'") shellExecute($sCmd) EndIf _ConsoleWrite("- _ShellExecute()") endfunc Func _ShellExecuteWait($sCmd) _ConsoleWrite("+ _ShellExecuteWait()") if $sCmd = "" Then _ConsoleWrite(": No command passed") Else _ConsoleWrite(": Running '" & $sCmd & "'") ShellExecuteWait($sCmd) EndIf _ConsoleWrite("- _ShellExecuteWait()") endfunc func _ToggleState() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) Else WinSetState($sActiveWinTitle,"",@SW_MAXIMIZE) EndIf EndFunc Func _TopLeft() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1],$aActiveDisplay[2],$aActiveDisplay[3]/2,$aActiveDisplay[4]/2) EndFunc Func _TopHalf() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1],$aActiveDisplay[2],$aActiveDisplay[3],$aActiveDisplay[4]/2) EndFunc func _TopRight() if $bMaximized then WinSetState($sActiveWinTitle,"",@SW_RESTORE) WinMove($sActiveWinTitle,"",$aActiveDisplay[1] + ($aActiveDisplay[3]/2),$aActiveDisplay[2],$aActiveDisplay[3]/2,$aActiveDisplay[4]/2) EndFunc func _UpdateCheck() _ConsoleWrite("+ _UpdateCheck()") $sTemp = "" $aTemp = stringsplit(_InetGetSource($sAppHome & "/" & stringlower($sAppName) & ".au3"), @CRLF) For $i = 1 to $aTemp[0] if StringInStr($aTemp[$i], "$sAppVersion") then $sTemp = $aTemp[$i] ExitLoop endif Next if $sTemp <> "" then $aOnlineVersion = StringSplit($sTemp, "=") $sOnlineVersion = StringReplace(StringStripWS($aOnlineVersion[2], 8), '"', "") _ConsoleWrite(": Online = " & $sOnlineVersion) _ConsoleWrite(": User = " & $sAppVersion) if $sOnlineVersion <> "" and Not Stringinstr($sOnlineVersion, "") Then If $sAppVersion < $sOnlineVersion Then _ConsoleWrite(": User is OLDER") $sMsg = "A newer version of this program is available for download." & @CRLF & @CRLF $sMsg &= "Do you want to visit the " & $sAppname & " site to download v." & $sOnlineVersion & "?" & @CRLF & @CRLF $sMsg &= "Selecting 'Yes' will close this app and take you to the website." If MsgBox(4, $sAppTitle, $sMsg) = 6 Then _ConsoleWrite(": Launching default web browser to " & $sAppHome) _ShellExecute($sAppHome) Exit EndIf ElseIf $sAppVersion >= $sOnlineVersion Then _ConsoleWrite(": User is UP-TO-DATE") TrayTip($sAppTitle, "Your version is up-to-date.",5) EndIf Else _ConsoleWrite(": Data received but no version info found") traytip($sAppTitle,"Unable to locate versioning info in data received." & @CRLF & "Please go to the homepage for further update details.",5) EndIf Else _ConsoleWrite(": Unable to obtain version content") traytip($sAppTitle,"Unable to obtain online version info." & @CRLF & "Check your connection and try again.",5) EndIf _ConsoleWrite("- _UpdateCheck()") EndFunc