天气预报
下载:/uploadfile/200810/4/214444761.zip 演示图: 代码: #cs ____________________________________ AutoIt 版本: 3.2.13.7 (第一版) 脚本作者: yEn Email: yen861220@yeah.net QQ/TM: 脚本版本: 0.0.0.19 脚本功能: 天气预报 #ce _______________脚本开始_________________ #NoTrayIcon ;隐藏托盘图标 #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <IE.au3> ;IE UDF #include <GuiComboBox.au3> ;ComboBox UDF #include <GDIPlus.au3> ;Plus UDF opt('GUIResizeMode', 805) ;调整窗口大小,同时保持控件位置 Dim $IE_Ver,$Ping_Net Dim $XMLFile,$Read_Assign_City Dim $Now_Temperature,$Now_Time,$Day[3],$Png[8],$Weather[3],$Wind_Temperature[3] Dim $Show_Big_Image_File,$Show_Small_A_Tomorrow_Image_File,$Show_Small_Today_Image_File,$Show_Small_Tomorrow_Image_File Dim $Show_Big_Image,$Show_Small_A_Tomorrow_Image,$Show_Small_Today_Image,$Show_Small_Tomorrow_Image Dim $hGraphic $Seting_Title = "天气预报 by yEn" If WinExists($Seting_Title) Then ;判断程序是否已经运行 MsgBox(48,"警告","程序已经运行了!") Exit EndIf AutoItWinSetTitle($Seting_Title) $Set_On = False ;判断是否有打开设置! $IE_Ver = StringLeft(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer","Version"),3) ;读取IE版本 $XMLFile = @ScriptDir & "\Seting.xml" ;定义配置文件路径 $TQ_Gui = GUICreate($Seting_Title, 259, 210, @DesktopWidth-259, 75, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetBkColor(0xC0DCC0) $Label_City = GUICtrlCreateLabel("", 8, 3, 191, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) $Prov_and_Time = GUICtrlCreateLabel("", 28, 29, 138, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) $Now_Weather = GUICtrlCreateLabel("", 10, 47, 171, 23) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) $Line_1 = GUICtrlCreateLabel("__________________________________", 8, 68, 242, 14) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) $Label4 = GUICtrlCreateLabel("预计未来24、48小时的天气:", 40, 88, 175, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) $Label_Today = GUICtrlCreateLabel("", 8, 112, 64, 17) GUICtrlSetColor(-1, 0x008000) $Label_Today_Weather = GUICtrlCreateLabel("", 96, 112, 28, 17) GUICtrlSetColor(-1, 0x008000) $Label_Today_Temp = GUICtrlCreateLabel("", 128, 112, 138, 17) GUICtrlSetColor(-1, 0x008000) $Label_Tomorrow = GUICtrlCreateLabel("", 8, 136, 64, 17) GUICtrlSetColor(-1, 0x008000) $Label_A_Tomorrow = GUICtrlCreateLabel("", 8, 160, 64, 17) GUICtrlSetColor(-1, 0x008000) $Label_Tomorrow_Weather = GUICtrlCreateLabel("", 96, 136, 28, 17) GUICtrlSetColor(-1, 0x008000) $Label_A_Tomorrow_Weather = GUICtrlCreateLabel("", 96, 160, 28, 17) GUICtrlSetColor(-1, 0x008000) $Label_Tomorrow_Temp = GUICtrlCreateLabel("", 128, 136, 138, 17) GUICtrlSetColor(-1, 0x008000) $Label_A_Tomorrow_Temp = GUICtrlCreateLabel("", 128, 160, 138, 17) GUICtrlSetColor(-1, 0x008000) $Quit = GUICtrlCreateLabel("退出", 224, 192, 28, 17) GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) GUICtrlSetCursor (-1, 0) $setting = GUICtrlCreateLabel("设置", 184, 192, 28, 17) GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) GUICtrlSetCursor (-1, 0) $Refurbish = GUICtrlCreateLabel("刷新", 144, 192, 28, 17) GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) GUICtrlSetCursor (-1, 0) $Line_2 = GUICtrlCreateLabel("__________________________________", 8, 208, 242, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) $Label21 = GUICtrlCreateLabel("省:", 8, 234, 28, 17) GUICtrlSetColor(-1, 0x008000) $Combo_Prov = GUICtrlCreateCombo("", 40, 231, 129, 25) $Label22 = GUICtrlCreateLabel("市:", 8, 265, 28, 17) GUICtrlSetColor(-1, 0x008000) $Combo_City = GUICtrlCreateCombo("", 40, 263, 129, 25) $Ok = GUICtrlCreateLabel("确定", 183, 265, 28, 17) GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) GUICtrlSetCursor (-1, 0) $Cancel = GUICtrlCreateLabel("取消", 222, 265, 28, 17) GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif") GUICtrlSetColor(-1, 0x008000) GUICtrlSetCursor (-1, 0) $Label_State = GUICtrlCreateLabel("", 8, 192, 125, 17) GUICtrlSetColor(-1, 0x800000) $Label_About = GUICtrlCreateLabel("by yEn", 184, 233, 59, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x800000) GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST") ;拖动窗口 _GDIPlus_StartUp () GUISetState(@SW_SHOW) GUICtrlSetData($Label_State,"正在检查网络...") $Ping_Net=Ping("www.soso.com",300) ;检查是否有连接网络 If $Ping_Net Then ;如果连接失败,退出程序 GUICtrlSetData($Label_State,"连接网络成功...") Else Msgbox(48,"连接失败","无法更新信息,请检查你的网络!") Exit EndIf TQ_Load() ;初始化 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Quit ;退出 Exit Case $Setting ;设置 If $Set_On = False Then ;判断是是否打开了设置 WinMove($TQ_Gui,"",Default,Default,Default,296) $Set_On = True Else WinMove($TQ_Gui,"",Default,Default,Default,210) $Set_On = False EndIf Case $Combo_Prov ;读取省里所有的市 R_Combo_City(GUICtrlRead($Combo_Prov)) Case $Cancel ;取消 WinMove($TQ_Gui,"",Default,Default,Default,210) $Set_On = False Case $Refurbish ;刷新 TQ_Load() Case $Ok ;确定 $objXML=ObjCreate("Microsoft.XMLDOM") $objXML.load($XMLFile) $ReadConfig = $objXML.documentElement.selectSingleNode("Config") $ReadConfig.childNodes.item(0).text = GUICtrlRead($Combo_City) $objXML.save($XMLFile) WinMove($TQ_Gui,"",Default,Default,Default,210) $Set_On = False TQ_Load() EndSwitch WEnd _GDIPlus_GraphicsDispose ($hGraphic) _GDIPlus_ImageDispose ($Show_Big_Image) _GDIPlus_ImageDispose ($Show_Small_Today_Image) _GDIPlus_ImageDispose ($Show_Small_Tomorrow_Image) _GDIPlus_ImageDispose ($Show_Small_A_Tomorrow_Image) _GDIPlus_ShutDown () Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam) If ($hWnd = $TQ_Gui) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION; EndFunc Func TQ_Load() ;初始化 GUICtrlSetData($Label_State,"正在读取配置文件...") If FileExists($XMLFile) = 0 Then ;检查配置XML文件是否存在 If MsgBox(4+16+0,"文件错误","读取文件失败,是否要恢复文件?!")=6 Then FileInstall("C:\Seting.xml","Seting.xml") ;"C:\Seting.xml,在编译的时候,要注意!" Read_AssignCity() ;读取指定城市 Else Exit EndIf Else Read_AssignCity() EndIf GUICtrlSetData($Label_State,"正在更新天气信息...") ;更新信息 Read_TQ_Xinxi() GUICtrlSetData($Label_State,"正在加载天气信息...") ;加载信息 Display_Xinxi() GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT") ;显示图片 Display_PNG() GUICtrlSetData($Label_State,"完成!") EndFunc Func Read_AssignCity() ;读取配置文件指定城市 Local $objXML,$ReadConfig,$AllNum,$i Local $ReadCityList,$Read_Prov,$Read_City $objXML=ObjCreate("Microsoft.XMLDOM") $objXML.load($XMLFile) $ReadConfig = $objXML.documentElement.selectSingleNode("Config") $AllNum = $ReadConfig.childNodes.length - 1 If $AllNum >= 0 Then For $i=0 To $AllNum $Read_Assign_City = $ReadConfig.childNodes.item($i).childNodes.item(0).text Next EndIf $ReadCityList=$objXML.documentElement.selectSingleNode("City_List") ;读取配置文件里所有的省份,并添加到$Combo_Prov里 $AllNum=$ReadCityList.childNodes.length - 1 If $AllNum >= 0 Then For $i=0 To $AllNum $Read_Prov=$ReadCityList.childNodes.item($i).childNodes.item(0).text $Read_City=$ReadCityList.childNodes.item($i).childNodes.item(1).text _GUICtrlComboBox_AddString($Combo_Prov,$Read_Prov) Next EndIf _GUICtrlComboBox_SetCurSel($Combo_Prov,0) R_Combo_City(GUICtrlRead($Combo_Prov)) ;读取省份里所有的市 If $Read_Assign_City = "" Then ;不能为空,所以空的就退出 MsgBox(16,"错误","配置文件有误,不能正常读取!") Exit EndIf Return EndFunc Func Read_TQ_Xinxi() ;读取天气信息 Local $oIE,$sHTML,$i,$Temp,$Weather_Temp[3],$Wind_Temperature_Temp[3] ShellExecute ("iexplore.exe", "about:blank","","",@SW_HIDE) If $IE_Ver > "6.0" Then ;如果IE版本高过6.0的话,IE的标题文字是"空白页" WinWait ("空白页") Else WinWait ("about:blank") EndIf $oIE = _IEAttach ("about:blank", "url") _IELoadWait ($oIE) _IENavigate ($oIE, "http://www.soso.com/tb.q?cid=tb.tq&cin=&city=" & $Read_Assign_City) $sHTML = _IEBodyReadHTML ($oIE) ;下面这6行代码研究了很久,也是本程序的核心代码。 ;虽然不是很精确的读取到想要的数据,但经过处理还是可以的. ;------------------------------------------------ $Now_Temperature_Array = StringRegExp($sHTML, "<(?i)strong class=fs_14>(.*?)</(?i)strong>",1) ;现时温度和气候 $Now_Time_Array = StringRegExp($sHTML, "<(?i)li>(.*?)<(?i)br>",1) ;当前时间 $Day_Array = StringRegExp($sHTML, "<(?i)div class=today>(.*?)</(?i)div>",3) ;日期(今天,明天,后天) $Png_Array = StringRegExp($sHTML, "(src=" & "'" & "(.*?)" & "'" & ", sizingMethod=" & "'" & "scale" & "')",3) ;图片 $Weather_Array = StringRegExp($sHTML, "></(?i)span>(.*?)\n<DIV",3) ;未来气候 $Wind_Temperature_Array = StringRegExp($sHTML, "<(?i)div style=" & '"' & "TEXT-ALIGN: center" & '"' & ">(.*?)</(?i)DIV>",3) ;未来的温度和风向 ;------------------------------------------------- ;分析现时温度和气候,并且整理数据 For $i = 0 To UBound($Now_Temperature_Array) -1 $Temp = $Now_Temperature_Array[$i] Next $Now_Temperature = StringReplace($Temp, " ", " ") ;整理当时时间 For $i = 0 To UBound($Now_Time_Array) -1 $Temp = $Now_Time_Array[$i] Next $Now_Time = StringRight($Temp,5) ;整理日期 For $i = 0 To UBound($Day_Array) -1 $Day[$i]=$Day_Array[$i] Next ;整理图片 For $i = 0 To UBound($Png_Array) -1 $Png[$i] = $Png_Array[$i] Next ;整理未来的气候数据 For $i = 0 To UBound($Weather_Array) -1 $Weather_Temp[$i] = $Weather_Array[$i] Next For $i = 0 To 2 $Weather[$i] = StringStripCR(StringReplace($Weather_Temp[$i], " ", "")) Next ;整理未来的温度和风向数据 For $i = 0 To UBound($Wind_Temperature_Array) -1 $Wind_Temperature_Temp[$i] = $Wind_Temperature_Array[$i] Next For $i = 0 To 2 $Wind_Temperature[$i] = StringReplace($Wind_Temperature_Temp[$i], "<BR>", " ") Next _IEQuit ($oIE) ;关闭IE Return EndFunc Func Display_Xinxi() ;加载信息 Local $Big_Image,$Day_or_Night_Temp,$Day_or_Night GUICtrlSetData($Label_City,$Read_Assign_City) GUICtrlSetData($Prov_and_Time,"现时 " & $Now_Time & " 的天气:") GUICtrlSetData($Now_Weather,$Now_Temperature) GUICtrlSetData($Label_Today,$Day[0]) GUICtrlSetData($Label_Today_Weather,$Weather[0]) GUICtrlSetData($Label_Today_Temp,$Wind_Temperature[0]) GUICtrlSetData($Label_Tomorrow,$Day[1]) GUICtrlSetData($Label_Tomorrow_Weather,$Weather[1]) GUICtrlSetData($Label_Tomorrow_Temp,$Wind_Temperature[1]) GUICtrlSetData($Label_A_Tomorrow,$Day[2]) GUICtrlSetData($Label_A_Tomorrow_Weather,$Weather[2]) GUICtrlSetData($Label_A_Tomorrow_Temp,$Wind_Temperature[2]) $Big_Image = StringTrimLeft($Png[1],StringInStr($Png[1],"/",0, -1)) $Day_or_Night_Temp = StringTrimLeft($Png[1],StringInStr($Png[1],"/",0, -2)) $Day_or_Night = StringTrimRight($Day_or_Night_Temp,9) ;发现显示大的图标的路径白天跟晚上的不一样,研究了一下发现只有两个图标不一样而已 ;下面的代码做了一些处理. If $Day_or_Night = "day" Then If $Big_Image <> "b_a0.png" And $Big_Image <> "b_a1.png" Then $Show_Big_Image_File = @ScriptDir & "\Image\Big\" & $Big_Image ElseIf $Big_Image = "b_a0.png" Then $Show_Big_Image_File = @ScriptDir & "\Image\Big\b_day_a0.png" ElseIf $Big_Image = "b_a1.png" Then $Show_Big_Image_File = @ScriptDir & "\Image\Big\b_day_a1.png" EndIf ElseIf $Day_or_Night = "night" Then If $Big_Image <> "b_a0.png" And $Big_Image <> "b_a1.png" Then $Show_Big_Image_File = @ScriptDir & "\Image\Big\" & $Big_Image ElseIf $Big_Image = "b_a0.png" Then $Show_Big_Image_File = @ScriptDir & "\Image\Big\b_night_a0.png" ElseIf $Big_Image = "b_a1.png" Then $Show_Big_Image_File = @ScriptDir & "\Image\Big\b_night_a1.png" EndIf EndIf $Show_Small_Today_Image_File = @ScriptDir & "\Image\Small\" & StringTrimLeft($Png[3],StringInStr($Png[3],"/",0, -1)) $Show_Small_Tomorrow_Image_File = @ScriptDir & "\Image\Small\" & StringTrimLeft($Png[5],StringInStr($Png[5],"/",0, -1)) $Show_Small_A_Tomorrow_Image_File = @ScriptDir & "\Image\Small\" & StringTrimLeft($Png[7],StringInStr($Png[7],"/",0, -1)) Return EndFunc Func R_Combo_City($R_Por) ;读取省里的所有市 Local $objXML,$AllNum,$i,$Read_Prov,$Read_City _GUICtrlComboBox_ResetContent($Combo_City) $objXML=ObjCreate("Microsoft.XMLDOM") $objXML.load($XMLFile) $ReadCityList=$objXML.documentElement.selectSingleNode("City_List") $AllNum=$ReadCityList.childNodes.length - 1 If $AllNum >= 0 Then For $i=0 To $AllNum $Read_Prov=$ReadCityList.childNodes.item($i).childNodes.item(0).text $Read_City=$ReadCityList.childNodes.item($i).childNodes.item(1).text If $R_Por=$Read_Prov Then GUICtrlSetData($Combo_City,$Read_City) EndIf Next EndIf _GUICtrlComboBox_SetCurSel($Combo_City,0) Return EndFunc Func Display_PNG() ;显示PNG图片,参考论坛里显示PNG文章 $Show_Big_Image = _GDIPlus_ImageLoadFromFile ($Show_Big_Image_File) $Show_Small_Today_Image = _GDIPlus_ImageLoadFromFile ($Show_Small_Today_Image_File) $Show_Small_Tomorrow_Image = _GDIPlus_ImageLoadFromFile ($Show_Small_Tomorrow_Image_File) $Show_Small_A_Tomorrow_Image = _GDIPlus_ImageLoadFromFile ($Show_Small_A_Tomorrow_Image_File) $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($TQ_Gui) _WinAPI_InvalidateRect(WinGetHandle($TQ_Gui)) EndFunc Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam) _WinAPI_RedrawWindow($TQ_Gui, 0, 0, $RDW_UPDATENOW) If $hGraphic <> "" Then _GDIPlus_GraphicsDrawImageRect($hGraphic, $Show_Big_Image, 192, 16, 60, 50) _GDIPlus_GraphicsDrawImageRect($hGraphic, $Show_Small_Today_Image, 72, 109, 16, 16) _GDIPlus_GraphicsDrawImageRect($hGraphic, $Show_Small_Tomorrow_Image, 72, 133, 16, 16) _GDIPlus_GraphicsDrawImageRect($hGraphic, $Show_Small_A_Tomorrow_Image, 72, 157, 16, 16) EndIf _WinAPI_RedrawWindow($TQ_Gui, 0, 0, $RDW_VALIDATE) Return $GUI_RUNDEFMSG EndFunc ;==>MY_WM_PAINT |
<< 简易屏幕取色【RGB】谷歌在线翻译源码 >>
查看所有评论

