#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=weather_icon.ico #AutoIt3Wrapper_Res_Fileversion=1.5.6.10 #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y #AutoIt3Wrapper_Au3Check_Stop_OnWarning=y #AutoIt3Wrapper_Run_Tidy=y #Tidy_Parameters=/sfc #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;WindowsConstants.au3 Global Const $WM_COMMAND = 0x0111 Global Const $WS_CAPTION = 0x00C00000 Global Const $WS_POPUPWINDOW = 0x80880000 ;StaticConstants.au3 Global Const $SS_CENTER = 1 ;GUIEdit.au3 Global Const $__EDITCONSTANT_WM_GETTEXTLENGTH = 0x000E ;GUIConstantsEx.au3 Global Const $GUI_EVENT_CLOSE = -3 Global Const $GUI_RUNDEFMSG = "GUI_RUNDEFMSG" Global Const $GUI_DOCKALL = 0x0322 Global Const $GUI_BKCOLOR_TRANSPARENT = -2 ;Constants.au3 Global Const $TRAY_EVENT_PRIMARYDOUBLE = -13 ;EditConstants.au3 Global Const $ES_RIGHT = 2 Global Const $ES_NUMBER = 8192 Global Const $EN_CHANGE = 0x300 Global Const $EN_KILLFOCUS = 0x200 Global Const $EN_SETFOCUS = 0x100 ;ButtonConstants.au3 Global Const $BS_FLAT = 0x8000 Global Const $BS_DEFPUSHBUTTON = 0x0001 Global Const $BS_CENTER = 0x0300 Global Const $IniDir = @AppDataDir & "\WeatherTray\Settings.ini" Opt("GUIResizeMode", $GUI_DOCKALL) Opt("TrayMenuMode", 1) If Not FileExists(@AppDataDir & "\WeatherTray") Then DirCreate(@AppDataDir & "\WeatherTray") For $i = 0 To 48 InetGet("http://image.weather.com/web/common/wxicons/52/" & $i & ".gif?12122006", @AppDataDir & "\WeatherTray\Pic" & $i & ".gif") Next EndIf If Not FileExists(@AppDataDir & "\WeatherTray\Settings.ini") Then IniWrite($IniDir, "Settings", "Current", "West Chester, OH") IniWrite($IniDir, "Settings", "Refresh", 2) IniWrite($IniDir, "Settings", "Days", "7") EndIf Global $ZipCode Global $Home = "West Chester, OH" Global $Current = IniRead($IniDir, "Settings", "Current", "West Chester, OH") Global $Refresh_Rate = IniRead($IniDir, "Settings", "Refresh", 2) Global $Days = IniRead($IniDir, "Settings", "Days", "7") $Form1 = GUICreate("Weather Gadget", 200, 232) GUISetBkColor(0xFFFFFF) #Region Tray Menu TraySetClick(16) $Tray_Show = TrayCreateItem("Show Gadget") $Tray_Minimize = TrayCreateItem("Minimize to Tray") TrayCreateItem("") $Tray_Exit = TrayCreateItem("Exit") #EndRegion Tray Menu #Region Menu $FileMenu = GUICtrlCreateMenu("&File") $File_Minimize = GUICtrlCreateMenuItem("&Minimize to Tray", $FileMenu) $File_Settings = GUICtrlCreateMenuItem("&Settings", $FileMenu) GUICtrlCreateMenuItem("", $FileMenu) $File_Exit = GUICtrlCreateMenuItem("&Exit", $FileMenu) #EndRegion Menu GUICtrlCreateLabel("Weather Right Now For", 16, 8, 166, 14, $SS_CENTER) GUICtrlSetFont(-1, 8.5, 600) $Link = GUICtrlCreateLabel($Home, 16, 24, 166, 17, $SS_CENTER) ControlFocus($Form1, "", $Link) GUICtrlSetCursor(-1, 0) GUICtrlSetFont(-1, 8.5, 400, 4) GUICtrlSetColor(-1, 0x0000FF) $Temperature = GUICtrlCreateLabel("", 88, 45, 70, 31) GUICtrlSetFont(-1, 18, 400, 0, "Georgia") GUICtrlSetColor(-1, 0x565963) $Condition = GUICtrlCreateLabel("", 80, 78, 100, 38) GUICtrlSetFont(-1, 8.5, 400, 0, "Georgia") $Info = GUICtrlCreateLabel("", 16, 110, 140, 27) $Input = GUICtrlCreateInput("", 12, 144, 150, 21) GUICtrlSetData(-1, $Home) GUICtrlSetColor(-1, 0x808080) $Pic = GUICtrlCreatePic("", 16, 48, 52, 52) $Go_Button = GUICtrlCreateButton("Go", 164, 144, 26, 21, BitOR($BS_FLAT, $BS_DEFPUSHBUTTON)) ;~ DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) $Home_Button = GUICtrlCreateButton("Go Home", 12, 166, 52, 20, $BS_FLAT) ;~ DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) $Expand_Button = GUICtrlCreateButton("Expand", 74, 166, 52, 20, $BS_FLAT) ;~ DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) $English_Metric_Button = GUICtrlCreateLabel("Metric", 160, 170, 100, 14) GUICtrlSetCursor(-1, 0) GUICtrlSetFont(-1, 8.5, 400, 4) GUICtrlSetColor(-1, 0x0000EE) $Extended_Button = GUICtrlCreateButton("Extended", 12, 190, 52, 20, $BS_FLAT) ;~ DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) $Hourly_Button = GUICtrlCreateButton("Hourly", 74, 190, 52, 20, $BS_FLAT) ;~ DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") $Stats = _GetWeatherInfo($Home) If $Stats <> -1 Then GUICtrlSetData($Condition, $Stats[0]) GUICtrlSetData($Temperature, $Stats[1]) GUICtrlSetData($Link, GUICtrlRead($Input)) Global $Current = GUICtrlRead($Input) GUICtrlSetImage($Pic, @AppDataDir & "\WeatherTray\Pic" & $Stats[8] & ".gif") GUICtrlSetData($Info, $Stats[2] & @CRLF & $Stats[3] & @CRLF & $Stats[4] & @CRLF & $Stats[5] & _ @CRLF & $Stats[6] & @CRLF & $Stats[7]) GUICtrlSetTip($Link, "http://www.weather.com/weather/local/" & $ZipCode) EndIf GUISetState() $Timer = TimerInit() _ReduceMemory() While 1 $Msg = GUIGetMsg() $TrayMsg = TrayGetMsg() Switch $TrayMsg Case $Tray_Exit _WinAnimate($Form1, 1, 1, 150, 0) Exit Case $Tray_Minimize _WinAnimate($Form1, Random(1, 9, 1), 1, 60, 0) Case $TRAY_EVENT_PRIMARYDOUBLE If WinGetState($Form1) < 7 Then _WinAnimate($Form1, Random(1, 9, 1), 0, 60, 0) Else _WinAnimate($Form1, Random(1, 9, 1), 1, 60, 0) EndIf Case $Tray_Show _WinAnimate($Form1, Random(1, 9, 1), 0, 60, 0) EndSwitch Switch $Msg Case $GUI_EVENT_CLOSE, $File_Exit _WinAnimate($Form1, 1, 1, 150, 0) Exit Case $File_Minimize _WinAnimate($Form1, Random(1, 9, 1), 1, 60, 0) Case $Home_Button If GUICtrlRead($English_Metric_Button) = "Metric" Then $Stats = _GetWeatherInfo($Home, "English") Else $Stats = _GetWeatherInfo($Home, "Metric") EndIf If $Stats <> -1 Then GUICtrlSetData($Condition, $Stats[0]) GUICtrlSetData($Temperature, $Stats[1]) GUICtrlSetData($Link, GUICtrlRead($Input)) Global $Current = GUICtrlRead($Input) GUICtrlSetImage($Pic, @AppDataDir & "\WeatherTray\Pic" & $Stats[8] & ".gif") GUICtrlSetData($Info, $Stats[2] & @CRLF & $Stats[3] & @CRLF & $Stats[4] & @CRLF & $Stats[5] & _ @CRLF & $Stats[6] & @CRLF & $Stats[7]) GUICtrlSetTip($Link, "http://www.weather.com/weather/local/" & $ZipCode) EndIf $Timer = TimerInit() Case $Go_Button If GUICtrlRead($English_Metric_Button) = "Metric" Then $Stats = _GetWeatherInfo(GUICtrlRead($Input), "English") Else $Stats = _GetWeatherInfo(GUICtrlRead($Input), "Metric") EndIf If $Stats <> -1 Then GUICtrlSetData($Condition, $Stats[0]) GUICtrlSetData($Temperature, $Stats[1]) GUICtrlSetData($Link, GUICtrlRead($Input)) Global $Current = GUICtrlRead($Input) GUICtrlSetImage($Pic, @AppDataDir & "\WeatherTray\Pic" & $Stats[8] & ".gif") GUICtrlSetData($Info, $Stats[2] & @CRLF & $Stats[3] & @CRLF & $Stats[4] & @CRLF & $Stats[5] & _ @CRLF & $Stats[6] & @CRLF & $Stats[7]) GUICtrlSetTip($Link, "http://www.weather.com/weather/local/" & $ZipCode) EndIf $Timer = TimerInit() Case $Link ShellExecute("http://www.weather.com/weather/local/" & $ZipCode) Case $File_Settings Settings() Case $Expand_Button If GUICtrlRead($Expand_Button) = "Expand" Then GUICtrlSetData($Expand_Button, "Hide") Else GUICtrlSetData($Expand_Button, "Expand") EndIf Expand() Case $English_Metric_Button If GUICtrlRead($English_Metric_Button) = "Metric" Then GUICtrlSetData($English_Metric_Button, "English") $Stats = _GetWeatherInfo(GUICtrlRead($Input), "Metric") Else GUICtrlSetData($English_Metric_Button, "Metric") $Stats = _GetWeatherInfo(GUICtrlRead($Input)) EndIf If $Stats <> -1 Then GUICtrlSetData($Condition, $Stats[0]) GUICtrlSetData($Temperature, $Stats[1]) GUICtrlSetData($Link, GUICtrlRead($Input)) Global $Current = GUICtrlRead($Input) GUICtrlSetImage($Pic, @AppDataDir & "\WeatherTray\Pic" & $Stats[8] & ".gif") GUICtrlSetData($Info, $Stats[2] & @CRLF & $Stats[3] & @CRLF & $Stats[4] & @CRLF & $Stats[5] & _ @CRLF & $Stats[6] & @CRLF & $Stats[7]) GUICtrlSetTip($Link, "http://www.weather.com/weather/local/" & $ZipCode) EndIf $Timer = TimerInit() Case $Extended_Button GUISetState(@SW_DISABLE, $Form1) Extended_Forcast() GUISetState(@SW_ENABLE, $Form1) WinActivate($Form1) Case $Hourly_Button GUISetState(@SW_DISABLE, $Form1) HourByHour() GUISetState(@SW_ENABLE, $Form1) WinActivate($Form1) EndSwitch If TimerDiff($Timer) > 60000 * $Refresh_Rate Then If GUICtrlRead($English_Metric_Button) = "Metric" Then $Stats = _GetWeatherInfo(GUICtrlRead($Input), "English") Else $Stats = _GetWeatherInfo(GUICtrlRead($Input), "Metric") EndIf If $Stats <> -1 Then GUICtrlSetData($Condition, $Stats[0]) GUICtrlSetData($Temperature, $Stats[1]) GUICtrlSetData($Link, GUICtrlRead($Input)) Global $Current = GUICtrlRead($Input) GUICtrlSetImage($Pic, @AppDataDir & "\WeatherTray\Pic" & $Stats[8] & ".gif") GUICtrlSetData($Info, $Stats[2] & @CRLF & $Stats[3] & @CRLF & $Stats[4] & @CRLF & $Stats[5] & _ @CRLF & $Stats[6] & @CRLF & $Stats[7]) GUICtrlSetTip($Link, "http://www.weather.com/weather/local/" & $ZipCode) EndIf $Timer = TimerInit() EndIf Sleep(10) WEnd Func _English_Metric($Value, $Option) If StringLower($Option) = "kilometer" Then $Value *= 1.6093 ElseIf StringLower($Option) = "celcius" Then $Value = ((5 / 9) * ($Value - 32)) EndIf Return $Value EndFunc ;==>_English_Metric Func _GetWeatherInfo($Place, $Measurement = "English") Local $Pic $CityState = StringRegExpReplace($Place, "(?-i)[()1234567890]", "") $CityStateA = StringSplit($CityState, ",") If @error Then Return _SetError(1, $Place) Else $CityStateA[1] = StringReplace($CityStateA[1], " ", "+") $CityStateA[2] = StringReplace($CityStateA[2], " ", "") $GetZIP = _INetGetSource("http://zipcodes.addresses.com/results.php?ReportType=42&qc=" & $CityStateA[1] & "&qs=" & $CityStateA[2]) $GetZip2 = _StringBetween($GetZIP, '', '') If @error Then Return _SetError(2, $Place) Else $ZipCode = $GetZip2[0] EndIf EndIf $source = "http://www.weather.com/weather/local/" & $ZipCode $File = _INetGetSource($source) $Town = _StringBetween($File, "Right Now for
", " (") $GetWVH = _StringBetween($File, '', '') If @error Then Return _SetError(3, $Place) Else $TemperatureArray = _StringBetween($File, "temp=", "&") $CondArray = _StringBetween($File, "", "") $PictArray = _StringBetween($File, '') If $TemperatureArray <> 0 Then $Cond = $CondArray[0] $Feel = $CondArray[1] $Feel = StringRegExpReplace($Feel, "(?-i)[FelsLik
° ]", "") $Temp = $TemperatureArray[0] $Humidity = "Humidity: " & $GetWVH[3] $UV = "UV: " & $GetWVH[0] If $Measurement = "English" Then $Temp = $TemperatureArray[0] & "°F" $Feel = "Feels Like " & $Feel & "°F" $Wind = "Wind: " & StringReplace($GetWVH[1], "
", @CRLF) $Visibility = "Visibility: " & $GetWVH[9] $DewPoint = "Dew Point: " & StringReplace($GetWVH[7], "°F", Chr(176) & "F") Else $Temp = Round(_English_Metric($TemperatureArray[0], "celcius"), 0) & "°C" $Feel = "Feels Like " & Round(_English_Metric($Feel, "celcius"), 0) & "°C" Local $String = StringRegExp($GetWVH[1], "\d+", 1) If IsArray($String) Then $Wind = "Wind: " & StringReplace($GetWVH[1], $String[0] & " mph", Round(_English_Metric($String[0], "kilometer"), 1) & " kph") Else $Wind = "Wind: " & StringReplace($GetWVH[1], "
", @CRLF) EndIf $String = StringRegExp($GetWVH[7], "\d+", 1) $DewPoint = "Dew Point:" & Round(_English_Metric($String[0], "celcius"), 0) & Chr(176) & "C" $Visibility = "Visibility: " & Round(_English_Metric(StringRegExpReplace($GetWVH[9], "(?-i)[ miles]", ""), "kilometer"), 1) & " kilometers" EndIf Local $Weather[9] = [$Cond, $Temp, $Feel, $Visibility, $Wind, $Humidity, $UV, $DewPoint, $PictArray[0]] Return $Weather EndIf EndIf EndFunc ;==>_GetWeatherInfo Func _SetError($Error, $Data) Switch $Error Case 0 Return 0 Case 1 $ErrorTitle = "Error: Comma" $ErrorMsg = "'" & $Data & "'" & " was not found." & @CRLF & _ "Please put city and state with a comma between them." Case 2 $ErrorTitle = "Error: Spelling" $ErrorMsg = "'" & $Data & "'" & " was not found." & @CRLF & _ "Unable to find either city, state, or zip." & @CRLF & _ "Please check your spelling of both city and state." Case 3 $ErrorTitle = "Error: Zip Code" $ErrorMsg = "'" & $Data & "'" & " was not found." & @CRLF & _ "No matches found. Try another zip. U.S. zips" & @CRLF & _ " are 5 digits long. Try typing 'city, state'" & @CRLF & _ "if you can not find zip." EndSwitch MsgBox(0, $ErrorTitle, $ErrorMsg) Return -1 EndFunc ;==>_SetError Func _WinAnimate($Xwnd, $Xstyle = 0, $Xstate = 0, $Xdistance = 100, $Xdelay = 10) ; $Xstate - 0 = Show, 1 = Hide, ; $Xstyle - 1=Fade, 2=L-Slide, 3=R-Slide, 4=T-Slide, 5=B-Slide, 6=TL-Diag-Slide, 7=BL-Diag-Slide, 8=TR-Diag-Slide, 9=BR-Diag-Slide ; Error checking... If Not WinExists($Xwnd) Then Return SetError(1, -1, "window does not exist") If Not $Xstate == 0 Or Not $Xstate == 1 Then Return SetError(2, -1, "State is not Show or Hide") If $Xstyle == 0 Or $Xstyle >= 10 Then Return SetError(3, -1, "Style is out-of-range") ; Find Window location and Centered... Local $XPos = WinGetPos($Xwnd), $X_Move = 0, $Y_Move = 0, $MoveIt = 0 $X_Start = $XPos[0] $Y_Start = $XPos[1] $X_Final = (@DesktopWidth - $XPos[2]) / 2 $Y_Final = (@DesktopHeight - $XPos[3]) / 2 If $Xstate == 0 Then ; to Show the GUI WinSetTrans($Xwnd, "", 0) GUISetState(@SW_SHOW, $Xwnd) $Xtrans = 255 / $Xdistance If $Xstyle = 2 Or $Xstyle = 6 Or $Xstyle = 7 Then $X_Move = 1 $X_Final = $X_Final - $Xdistance ElseIf $Xstyle = 3 Or $Xstyle = 8 Or $Xstyle = 9 Then $X_Move = -1 $X_Final = $X_Final + $Xdistance EndIf If $Xstyle = 4 Or $Xstyle = 6 Or $Xstyle = 8 Then $Y_Move = 2 $Y_Final = $Y_Final - ($Xdistance * 2) ElseIf $Xstyle = 5 Or $Xstyle = 7 Or $Xstyle = 9 Then $Y_Move = -2 $Y_Final = $Y_Final + ($Xdistance * 2) EndIf Else ; to hide the GUI $Xtrans = -1 * (255 / $Xdistance) $X_Final = $X_Start $Y_Final = $Y_Start If $Xstyle = 2 Or $Xstyle = 6 Or $Xstyle = 7 Then $X_Move = -1 If $Xstyle = 3 Or $Xstyle = 8 Or $Xstyle = 9 Then $X_Move = 1 If $Xstyle = 4 Or $Xstyle = 6 Or $Xstyle = 8 Then $Y_Move = -2 If $Xstyle = 5 Or $Xstyle = 7 Or $Xstyle = 9 Then $Y_Move = 2 EndIf If $Y_Move <> 0 Or $X_Move <> 0 Then $MoveIt = 1 WinMove($Xwnd, "", $X_Final, $Y_Final) For $x = 1 To $Xdistance $XPos = WinGetPos($Xwnd) WinSetTrans($Xwnd, "", $x * $Xtrans) If $MoveIt = 1 Then WinMove($Xwnd, "", $XPos[0] + $X_Move, $XPos[1] + $Y_Move) Sleep($Xdelay) Next If $Xstate = 1 Then GUISetState(@SW_HIDE, $Xwnd) EndFunc ;==>_WinAnimate Func Expand() Local $Move = 50 Local $Pos = WinGetPos($Form1) If $Pos[3] = 262 Then WinMove($Form1, "", $Pos[0], $Pos[1], 206, 262 + $Move) ControlMove($Form1, "", $Info, 16, 110, 140, 27 + $Move) ControlMove($Form1, "", $Extended_Button, 12, 190 + $Move) ControlMove($Form1, "", $Hourly_Button, 74, 190 + $Move) ControlMove($Form1, "", $Input, 12, 144 + $Move) ControlMove($Form1, "", $Go_Button, 164, 144 + $Move) ControlMove($Form1, "", $English_Metric_Button, 160, 170 + $Move) ControlMove($Form1, "", $Expand_Button, 74, 166 + $Move) ControlMove($Form1, "", $Home_Button, 12, 166 + $Move) Else WinMove($Form1, "", $Pos[0], $Pos[1], 206, 262) ControlMove($Form1, "", $Info, 16, 110, 140, 27) ControlMove($Form1, "", $Extended_Button, 12, 190) ControlMove($Form1, "", $Hourly_Button, 74, 190) ControlMove($Form1, "", $Input, 12, 144) ControlMove($Form1, "", $Go_Button, 164, 144) ControlMove($Form1, "", $English_Metric_Button, 160, 170) ControlMove($Form1, "", $Expand_Button, 74, 166) ControlMove($Form1, "", $Home_Button, 12, 166) EndIf EndFunc ;==>Expand Func Extended_Forcast($Day_Num = $Days, $Place = $Current) Local $Temp[1], $Day[11], $Image[11], $Condition[11], $HighTemp[11], $LowTemp[11], $Precipitation[11], $Direction[11], $Wind[11] Local $CityState, $CityStateA, $GetZIP, $GetZip2, $Zip, $source, $Left, $Msg, $GUI $CityState = StringRegExpReplace($Place, "(?-i)[()1234567890]", "") $CityStateA = StringSplit($CityState, ",") If @error Then Return SetError(1, $Place, -1) Else $CityStateA[1] = StringReplace($CityStateA[1], " ", "+") $CityStateA[2] = StringReplace($CityStateA[2], " ", "") $GetZIP = _INetGetSource("http://zipcodes.addresses.com/results.php?ReportType=42&qc=" & $CityStateA[1] & "&qs=" & $CityStateA[2]) $GetZip2 = _StringBetween($GetZIP, '', '') If @error Then Return SetError(2, $Place, -1) Else $Zip = $GetZip2[0] EndIf EndIf If $Day_Num > 9 Then Return SetError(1, 0, -1) $source = _INetGetSource("http://www.weather.com/weather/tenday/" & $Zip & "?dp=windsdp") If @error Then Return SetError(2, 0, -1) $GUI = GUICreate("Extended Forecast", $Day_Num * 105 + 15, 90 + 30 + 40 + 20 + 20 + 20 + 10, -1, -1, BitOR($WS_POPUPWINDOW, $WS_CAPTION), -1, $Form1) $source = StringTrimLeft($source, StringInStr($source, '

')) $Left = 15 For $x = 2 To $Day_Num + 1 $Temperary = _StringBetween($source, '', '') $Temp = _StringBetween($Temperary[0], 'Num=' & ($x - 1) & '">', '

') $Day[$x] = StringReplace($Temp[0], "
", ", ") $Temp = _StringBetween($Temperary[0], '


') $Condition[$x] = $Temp[0] $Temp = _StringBetween($Temperary[0], '

', '
') $HighTemp[$x] = StringReplace($Temp[0], '°', Chr(176)) $Temp = _StringBetween($Temperary[0], '
', '

') $LowTemp[$x] = StringReplace($Temp[0], '°', Chr(176)) $Temperary[0] = StringTrimLeft($Temperary[0], StringInStr($Temperary[0], "")) $Temp = _StringBetween($Temperary[0], '

', '

') $Precipitation[$x] = StringReplace($Temp[0], "%", Chr(37)) $Temp = _StringBetween($Temperary[0], '

', '

') $Direction[$x] = $Temp[0] $Temp = _StringBetween($Temperary[0], '', '') $Wind[$x] = $Temp[0] & " mph" GUICtrlCreateLabel($Day[$x], $Left, 15, 90, 25, $SS_CENTER) GUICtrlSetFont(-1, 10, 600, 0, "Georgia") GUICtrlCreatePic(@AppDataDir & "\WeatherTray\Pic" & $Image[$x], $Left, 35, 90, 90) GUICtrlCreateLabel($Condition[$x], $Left, 35 + 90, 90, 30, $SS_CENTER) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont(-1, 10, 400, 0, "Georgia") GUICtrlCreateLabel($HighTemp[$x] & "/" & $LowTemp[$x], $Left, 90 + 30 + 40, 90, 20, $SS_CENTER) GUICtrlSetFont(-1, 12, 600, 0, "Georgia") GUICtrlCreateLabel("Precip: " & $Precipitation[$x], $Left, 90 + 30 + 40 + 20, 90, 20, $SS_CENTER) GUICtrlSetFont(-1, 10, 400, 0, "Georgia") GUICtrlCreateLabel("Wind: " & $Wind[$x], $Left, 90 + 30 + 40 + 20 + 20, 90, 20, $SS_CENTER) GUICtrlSetFont(-1, 9, 400, 0, "Georgia") $Left += 105 Next GUISetState() While WinExists($GUI) $Msg = GUIGetMsg() Switch $Msg Case - 3 GUIDelete($GUI) EndSwitch WEnd $Msg = 0 Return 1 EndFunc ;==>Extended_Forcast Func HourByHour($Place = $Current) Local $Time[9], $Image[9], $Temperature[9], $Precipitation[9], $Temp[1] Local $Left, $Msg, $CityState, $CityStateA, $GetZIP, $GetZip2, $Zip, $GUI, $source $CityState = StringRegExpReplace($Place, "(?-i)[()1234567890]", "") $CityStateA = StringSplit($CityState, ",") If @error Then Return SetError(1, $Place, -1) Else $CityStateA[1] = StringReplace($CityStateA[1], " ", "+") $CityStateA[2] = StringReplace($CityStateA[2], " ", "") $GetZIP = _INetGetSource("http://zipcodes.addresses.com/results.php?ReportType=42&qc=" & $CityStateA[1] & "&qs=" & $CityStateA[2]) $GetZip2 = _StringBetween($GetZIP, '', '') If @error Then Return SetError(2, $Place, -1) Else $Zip = $GetZip2[0] EndIf EndIf $GUI = GUICreate("8 Hour Forecast", 810, 90 + 50 + 10 + 28 + 10 + 25 + 10, -1, -1, BitOR($WS_POPUPWINDOW, $WS_CAPTION), -1, $Form1) GUISetBkColor(0xFFFFFF) $source = _INetGetSource("http://www.weather.com/weather/hourbyhour/graph/" & $ZipCode & "?from=dayDetails_topnav_undeclared") If @error Then Return -1 $Left = 10 For $x = 0 To 7 $Temperary = _StringBetween($source, 'id="hbhWxHour' & $x & '">', '') $Temp = _StringBetween($Temperary[0], '"hbhWxTime">
', '
') $Time[$x + 1] = $Temp[0] $Temp = _StringBetween($Temperary[0], ')
		$Temp = StringRegExp($Temp[0], "\d{1,2}.gif", 2)
		$Image[$x + 1] = $Temp[0]
		$Temp = _StringBetween($Temperary[0],
', '
') $Temperature[$x + 1] = StringReplace($Temp[0], "° ", Chr(176)) $Temp = _StringBetween($Temperary[0], '
', '') $Precipitation[$x + 1] = $Temp[0] GUICtrlCreateLabel($Time[$x + 1], $Left, 10, 90, 25, $SS_CENTER) GUICtrlSetFont(-1, 17, 800, 0, "Georgia") GUICtrlCreatePic(@AppDataDir & "\WeatherTray\Pic" & $Image[$x + 1], $Left, 50, 90, 90) GUICtrlCreateLabel($Temperature[$x + 1], $Left, 90 + 50 + 10, 90, 28, $SS_CENTER) GUICtrlSetFont(-1, 17, 400, 0, "Georgia") GUICtrlCreateLabel("Precip: " & $Precipitation[$x + 1], $Left, 90 + 50 + 10 + 28 + 10, 90, 25, $SS_CENTER) GUICtrlSetFont(-1, 11, 500, 0, "Georgia") $Left += 100 Next GUISetState() While WinExists($GUI) $Msg = GUIGetMsg() Switch $Msg Case - 3 GUIDelete($GUI) EndSwitch WEnd Return 1 EndFunc ;==>HourByHour Func Settings() $Settings = GUICreate("Settings", 354, 176, -1, -1, -1, -1, $Form1) $Group1 = GUICtrlCreateGroup("Options", 15, 15, 321, 145, $BS_CENTER) GUICtrlCreateLabel("Refresh Rate:", 25, 40, 70, 17) $Refresh_Input = GUICtrlCreateInput($Refresh_Rate, 37, 62, 33, 21, BitOR($ES_RIGHT, $ES_NUMBER)) GUICtrlSetLimit(-1, 3) GUICtrlCreateLabel("Home Location:", 197, 40, 79, 17) $Label1 = GUICtrlCreateLabel($Home, 202, 62, 120, 17) GUICtrlSetColor(-1, 0x0000FF) $Use_Current_Location = GUICtrlCreateButton("Use Current Location", 197, 80, 125, 18, 0) GUICtrlCreateLabel("Current Location:", 197, 112, 85, 17) GUICtrlCreateLabel($Current, 202, 134, 120, 17) GUICtrlSetColor(-1, 0xFF0000) GUICtrlCreateLabel("minute(s)", 76, 64, 46, 17) GUICtrlCreateLabel("Extended Forecast: ", 25, 95, 99, Default, $SS_CENTER) $Days_Input = GUICtrlCreateInput($Days, 124, 91, 15, 20, BitOR($ES_NUMBER, $SS_CENTER)) GUICtrlCreateLabel("day(s)", 140, 95, 30, Default, $SS_CENTER) $OK = GUICtrlCreateButton("&OK", 50, 125, 75, 25) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_DISABLE, $Form1) _WinAnimate($Settings, Random(1, 9, 1), 0, 40, 0) While WinExists($Settings) $Msg = GUIGetMsg() Switch $Msg Case $GUI_EVENT_CLOSE GUIDelete($Settings) Case $OK Global $Refresh_Rate = GUICtrlRead($Refresh_Input) Global $Days = GUICtrlRead($Days_Input) GUIDelete($Settings) Case $Use_Current_Location GUICtrlSetData($Label1, $Current) Global $Home = $Current EndSwitch Sleep(25) WEnd GUISetState(@SW_ENABLE, $Form1) WinActivate($Form1) EndFunc ;==>Settings Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) Local $hWndFrom, $iIDFrom, $iCode $hWndEdit1 = GUICtrlGetHandle($Input) $hWndFrom = $ilParam $iIDFrom = _WinAPI_LoWord($iwParam) $iCode = _WinAPI_HiWord($iwParam) Switch $hWndFrom Case $hWndEdit1 Switch $iCode Case $EN_KILLFOCUS If _GUICtrlEdit_GetTextLen($Input) = 0 Then GUICtrlSetData($Input, $Home) GUICtrlSetColor($Input, 0x808080) EndIf Case $EN_SETFOCUS If GUICtrlRead($Input) = $Home Then GUICtrlSetData($Input, "") GUICtrlSetColor($Input, 0x000000) EndIf Case $EN_CHANGE EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND Func _ReduceMemory($i_PID = -1);w0uter created this ABSOLUTELY AMAZING bit of code. Put into every script you write! If $i_PID <> -1 Then Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) Else Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) EndIf Return $ai_Return[0] EndFunc ;==>_ReduceMemory #Region Included Functions Func _GUICtrlEdit_GetTextLen($hWnd) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) Return _SendMessage($hWnd, $__EDITCONSTANT_WM_GETTEXTLENGTH) EndFunc ;==>_GUICtrlEdit_GetTextLen Func _INetGetSource($s_URL, $s_Header = '') If StringLeft($s_URL, 7) <> 'http://' And StringLeft($s_URL, 8) <> 'https://' Then $s_URL = 'http://' & $s_URL Local $h_DLL = DllOpen("wininet.dll") Local $ai_IRF, $s_Buf = '' Local $ai_IO = DllCall($h_DLL, 'int', 'InternetOpen', 'str', "AutoIt v3", 'int', 0, 'int', 0, 'int', 0, 'int', 0) If @error Or $ai_IO[0] = 0 Then DllClose($h_DLL) SetError(1) Return "" EndIf Local $ai_IOU = DllCall($h_DLL, 'int', 'InternetOpenUrl', 'int', $ai_IO[0], 'str', $s_URL, 'str', $s_Header, 'int', StringLen($s_Header), 'int', 0x80000000, 'int', 0) If @error Or $ai_IOU[0] = 0 Then DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0]) DllClose($h_DLL) SetError(1) Return "" EndIf Local $v_Struct = DllStructCreate('udword') DllStructSetData($v_Struct, 1, 1) While DllStructGetData($v_Struct, 1) <> 0 $ai_IRF = DllCall($h_DLL, 'int', 'InternetReadFile', 'int', $ai_IOU[0], 'str', '', 'int', 256, 'ptr', DllStructGetPtr($v_Struct)) $s_Buf &= StringLeft($ai_IRF[2], DllStructGetData($v_Struct, 1)) WEnd DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IOU[0]) DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0]) DllClose($h_DLL) Return $s_Buf EndFunc ;==>_INetGetSource Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lparam") Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessage", "hwnd", $hWnd, "int", $iMsg, $wParamType, $wParam, $lParamType, $lParam) If @error Then Return SetError(@error, @extended, "") If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn] Return $aResult EndFunc ;==>_SendMessage Func _StringBetween($sString, $sStart, $sEnd, $vCase = -1, $iSRE = -1) If $iSRE = -1 Or $iSRE = Default Then If $vCase = -1 Or $vCase = Default Then $vCase = 0 Else $vCase = 1 EndIf Local $sHold = '', $sSnSStart = '', $sSnSEnd = '' While StringLen($sString) > 0 $sSnSStart = StringInStr($sString, $sStart, $vCase) If Not $sSnSStart Then ExitLoop $sString = StringTrimLeft($sString, ($sSnSStart + StringLen($sStart)) - 1) $sSnSEnd = StringInStr($sString, $sEnd, $vCase) If Not $sSnSEnd Then ExitLoop $sHold &= StringLeft($sString, $sSnSEnd - 1) & Chr(1) $sString = StringTrimLeft($sString, $sSnSEnd) WEnd If Not $sHold Then Return SetError(1, 0, 0) $sHold = StringSplit(StringTrimRight($sHold, 1), Chr(1)) Local $avArray[UBound($sHold) - 1] For $iCC = 1 To UBound($sHold) - 1 $avArray[$iCC - 1] = $sHold[$iCC] Next Return $avArray Else If $vCase = Default Or $vCase = -1 Then $vCase = '(?i)' Else $vCase = '' EndIf Local $aArray = StringRegExp($sString, '(?s)' & $vCase & $sStart & '(.*?)' & $sEnd, 3) If IsArray($aArray) Then Return $aArray Return SetError(1, 0, 0) EndIf EndFunc ;==>_StringBetween Func _WinAPI_HiWord($iLong) Return BitShift($iLong, 16) EndFunc ;==>_WinAPI_HiWord Func _WinAPI_LoWord($iLong) Return BitAND($iLong, 0xFFFF) EndFunc ;==>_WinAPI_LoWord #EndRegion Included Functions