ErrorLevel("syntax") # 2010/05/17 (Mon) ネット接続部分修正 selindex[1] = "しない" selindex[2] = "する" Mortexe = systempath("ScriptExe") \ "MortScript.exe" Tetsudomscr = systempath("ScriptPath") \ systempath( "ScriptName" ) & systempath( "ScriptExt" ) NotifyApp = "\Program Files\cmdRegistryNotifyApp\cmdRegistryNotifyApp.exe" NotifyAppStop = "\Program Files\cmdRegistryNotifyApp\cmdRegistryStopNotification.exe" IniFileName = systempath("ScriptPath") \ systempath( "ScriptName" ) & ".ini" DefaultBrowserName = "\Windows\iexplore.exe" TrainRunAtT = """" & Tetsudomscr & """ RunAtTimer=ON" TrainRunAtA = """" & Tetsudomscr & """ RunAtAutoexec=ON" gozen = "Software\5zen\Tetsudo" # 拡張レジストリを使用するか?(0:使用しない 1:使用する) extReg = 1 ConnectName = split("接続しない,その他,インターネット設定",",") ### URL設定 URL_root = "http://www.tetsudo.com/" URL_Tetsudo = URL_root & "traffic/" ### データフォルダのパス DATA_path = systempath("ScriptPath") # 記事のページ数 MaxPage = 7 TitleArray = Array("新幹線","関東エリア(1/2)","関東エリア(2/2)","東海エリア","近畿エリア","九州エリア","その他のエリア") ### テンポラリファイル名 GetTime( Hour, Min , Sec, Day, Month, Year ) #DL_temp = DATA_path \ "Tetsudo_" & Year & Month & Day & "-" & Hour & Min & ".txt" DL_temp = DATA_path \ "Tetsudo_temp.txt" ### テキスト出力名 Tetsudoout = DATA_path \ "Tetsudo_Text.txt" ### レジストリ読み込み # 終了時にToday画面を再描画させるか call("RegstorySet","RDToday",1) # 接続方法 call("RegstorySet","InternetConnect",3) # タイマー call("RegstorySet","Timelag", 2) call("RegstorySet","Interval",5) # 現在の表示ページ call("RegstorySet","NowPage", 1) ### ブラウザによる詳細情報の表示 ### if (tiku ne "" && num ne "") BrowserName = IniRead( IniFileName, "Browser" , "ProgramPath" ) if (BrowserName eq "" || not fileexists(BrowserName) ) BrowserName = DefaultBrowserName endif internetUrl = regread("HKCU",gozen \ tiku \ num ,"url") CompanyName = regread("HKCU",gozen \ tiku \ num ,"Company") flg = regread("HKCU",gozen \ tiku \ num ,"info") if (flg eq "○" || flg eq "−") exit else if (Question(CompanyName & " の運行情報をブラウザで表示します。","確認","YesNo")) Run( BrowserName,regread("HKCU",gozen \ tiku \ num ,"url")) endif endif exit endif ### 表示する記事を切り替える ### if (Move ne "") Switch ( 1 ) case (ToUpper(Move) eq "NEXT") NowPage = NowPage + 1 if ( NowPage > MaxPage) NowPage = 1 endif case (ToUpper(Move) eq "BACK") NowPage = NowPage - 1 if ( NowPage < 1 ) NowPage = MaxPage endif case (ToUpper(Move) ne "BACK" && ToUpper(Move) ne "NEXT") exit endswitch x = 0 if ( NowPage = 3 ) x = 8 endif if ( NowPage > 2 ) v = NowPage - 1 else v = NowPage endif for i = 1 to 8 regwritestring("HKCU",gozen \ 0 \ i,"text1" , regread("HKCU",gozen \ v \ i + x, "text1")) regwritestring("HKCU",gozen \ 0 \ i,"text2" , regread("HKCU",gozen \ v \ i + x, "text2")) regwritestring("HKCU",gozen \ 0 \ i,"text3" , regread("HKCU",gozen \ v \ i + x, "text3")) regwritestring("HKCU",gozen \ 0 \ i,"text4" , regread("HKCU",gozen \ v \ i + x, "text4")) regwritestring("HKCU",gozen \ 0 \ i,"UrlFlg" , regread("HKCU",gozen \ v \ i + x, "UrlFlg")) regwritestring("HKCU",gozen \ 0 \ i,"Company" , regread("HKCU",gozen \ v \ i + x, "Company")) regwritestring("HKCU",gozen \ 0 \ i,"url" , regread("HKCU",gozen \ v \ i + x, "url")) regwritestring("HKCU",gozen \ 0 \ i,"info" , regread("HKCU",gozen \ v \ i + x, "info")) regwritestring("HKCU",gozen \ 0 \ i,"text" , regread("HKCU",gozen \ v \ i + x, "text")) regwritestring("HKCU",gozen \ 0 \ i,"time" , regread("HKCU",gozen \ v \ i + x, "time")) next # ジャンル名・表示ページを設定 regwritestring("HKCU",gozen ,"Category" , TitleArray[NowPage] ) regwritestring("HKCU",gozen ,"NowPage" , NowPage ) exit endif ### タイマー起動 ### if(RunAtTimer eq "ON") # Desktopが表示されてていない場合、Interval 分後に再実行 if (ActiveWindow() ne "Desktop") t = timestamp() call("TimerSet",t + Interval * 60 ) exit endif # ネット接続 i = 0 callfunction("NetConnect",i) if(i) # 回線接続できなかった(Interval 分後に再接続) t = timestamp() call("TimerSet",t + Interval * 60 - (t MOD 3600)) exit else # 運行情報データダウンロード callfunction("TetsudoDownload",i) if(i) call("TimerSet",timestamp() + 5 * 60) else call("TimerRoundSet") endif endif # ネット切断 call("NetDisconnect") exit endif ### マニュアル起動 ### if(RunAtManual eq "ON") # 実行問い合わせ if (Question("運行情報を取得します。",""."YesNo")) # ネット接続 i = 0 callfunction("NetConnect",i) if(i) hidewaitcursor message("ネット接続できませんでした") else call("TetsudoDownload") call("NetDisconnect") hidewaitcursor message("運行情報の取得を完了しました。") endif endif exit endif ### 回線接続時の自動起動によるダウンロード ### if(RunAtAutoexec eq "ON") NowTime = timestamp() + 60 while((regread("HKLM","System\State\Connections","Count") = 0) and (NowTime > timestamp())) sleep(1000) endwhile if(regread("HKLM","System\State\Connections","Count") = 0) exit endif for i = 1 to 3 callfunction("TetsudoDownload",j) if(j) sleep(10000) else i = 3 endif next exit endif while(1) ### メニュー選択 ### callfunction("TimerStr",buff) choice("運行情報","現在の運行情報は^NL^" & regread("HKCU",gozen,"ReleaseYMDT") & "^NL^のものです", \ "TodayRedraw  " & selindex[RDToday + 1] , \ "" , \ "タイマーセット(" & buff & ")" , \ "タイマーキャンセル" , \ "タイムラグ(" & Timelag & "分)" , \ "インターバル(" & Interval & "分後)" , \ "" , \ "その他の設定", \ "" , \ "運行情報ダウンロード") ## 終了 case(0) regwritedword("HKCU",gozen,"Timelag",Timelag) regwritedword("HKCU",gozen,"Interval",Interval) exit ## Today画面の再描画 case(1) call("RegstoryToggle","RDToday") ## タイマーセット case(3) if(question("タイマーをセットしますか?")) call("TimerDelete") callfunction("TimerRoundSet",j) message("初回 " & formattime("y/m/d H:i:s",j) & " にセットしました") endif # タイマーキャンセル case(4) if(question("タイマーをキャンセルしますか?^NL^現在 " & buff)) call("TimerDelete") message("タイマーを削除しました") endif # タイムラグ設定 case(5) j = input("更新時間の何分後にチェックしますか?","タイムラグ",0,0,Timelag) * 1 if(j<0) j = 0 endif if(question(j & "分後でよろしいですか?")) Timelag = j endif # インターバル設定 case(6) j = input("更新失敗時何分後に再度チェックしますか?","インターバル",0,0,Interval) * 1 if(j<1) j = 1 endif if(question(j & "分後でよろしいですか?")) Interval = j endif ## その他の設定 case(8) i = 1 while(i) LANautoexec = regkeyexists("HKLM","System\Notifications\Weather.LANautoexec") ASautoexec = regkeyexists("HKLM","System\Notifications\Weather.ASautoexec") choice("運行情報","各種設定", \ "ネット接続設定(" & ConnectName[InternetConnect] & ")" , \ "LAN接続時に自動更新" & selindex[LANautoexec + 1] , \ "AS開始時に自動更新" & selindex[ASautoexec + 1] ) # キャンセル case(0) i = 0 # 接続設定 case(1) j = choice("運行情報","インターネット接続名の選択",InternetConnect,0,ConnectName) if(j) InternetConnect = j regwritedword("HKCU",gozen,"InternetConnect",InternetConnect) endif #LAN接続時の自動更新 case(2) if(LANautoexec) runwait(NotifyAppStop,"3;Tetsudo.LANautoexec") else runwait(NotifyApp,"3;Tetsudo.LANautoexec;HKLM;System\State\Hardware;WiFi;" & Mortexe & ";'" & TrainRunAtA & "';-;-;-1;1;2;16;16;-") endif # AS開始時の自動更新 case(3) if(ASautoexec) runwait(NotifyAppStop,"3;News.ASautoexec") else runwait(NotifyApp,"3;News.ASautoexec;HKLM;System\State\Hardware;Cradled;" & Mortexe & ";'" & TrainRunAtA & "';-;-;-1;1;2;-;1;-") endif endchoice endwhile ## 運行情報ダウンロード case(10) i = 0 call("NetConnect", i) if(i) hidewaitcursor message("ネット接続できませんでした") else hidewaitcursor call("TetsudoDownload") call("NetDisconnect") endif endchoice endwhile exit ### ネット接続 ### # out...(ret.) 0...接続している/接続した 1...接続失敗 sub NetConnect WifiNow = regread( "HKLM" , "System\State\Hardware" , "Wifi" ) CellularNow = regread( "HKLM" , "System\State\Connections\Cellular", "Count") AsNow = regread( "HKLM" , "Drivers\USB\FunctionDrivers", "ActiveSyncConnected") ipAddr = regread( "HKLM" , "Comm\Tcpip\Hosts\dtpt_peer" , "ipaddr" ) ipAddrFlg = RegValueExists( "HKLM" , "Comm\Tcpip\Hosts\dtpt_peer", "ipaddr" ) if (CellularNow > 0) return(0) else if((WifiNow = 19) or (WifiNow = 23) or (WifiNow = 27)) return(0) else if (AsNow = 1 && ipAddrFlg = TRUE) #ActiveSync接続済みでIPアドレス割り当て済み return(0) else if (AsNow = 1 && ipAddrFlg = FALSE) #ActiveSync接続済みでIPアドレス割り当てなし return (1) else if ((CellularNow = 0) and (InternetConnect <> 1)) # 回線接続する Connect(ConnectName[InternetConnect]) Sleep( 8000 ) NetConnect = regread("HKLM","System\State\Connections","Count") endif return( NetConnect = 0 ) endif endif endif endif endsub ### ネット切断 ### sub NetDisconnect endsub ### ダウンロード(ファイルキャッシュ付) ### # in....[1] ダウンロードするURL # [2] 書き込むファイル名 sub DL_html local(i) download(argv[1],argv[2]) return(readfile(argv[2],0,"utf8-prefix")) endsub ### 配列に読み込む ### # in....[1] html # [2] html切り出し切欠 # [3] html切り出しここまで # [4] 地域名切り出し切欠 # [5] 地域名切り出しここまで # out...area_dir[] html # area_dir_name[] 地域名 sub GetArea local(i,GetStr) i = 1 x = 1 clear(area_dir) clear(area_dir_name) while(x) callfunction("BetweenStrings",GetStr,argv[1],x,argv[2],argv[3]) if(GetStr ne "") area_dir[i] = GetStr callfunction("BetweenStrings",area_dir_name[i],argv[1],x,argv[4],argv[5]) i = i + 1 else x = 0 endif endwhile return(i - 1) endsub ### レジストリ読み込み ### # in....[1] レジストリ名 # [2] 初期値 sub RegstorySet if(regvalueexists("HKCU",gozen,argv[1])) [argv[1]] = regread("HKCU",gozen,argv[1]) else [argv[1]] = argv[2] endif endsub ### レジストリトグル ### # in....[1] レジストリ名 sub RegstoryToggle [argv[1]] = 1 - [argv[1]] regwritedword("HKCU",gozen,argv[1],[argv[1]]) endsub ### タイマーをセットした時間を返す ### sub TimerStr call("RegstorySet","DownloadTime",0) if(DownloadTime) return(formattime("Y/m/d({W}) H:i:s",DownloadTime)) else return("----/--/--(---) --:--:--") endif endsub ### 巡回タイマーセット ### sub TimerRoundSet local(i) t = TimeStamp() #一時間後にタイマーをセット i = t + 3600 - (t MOD 3600) + Timelag * 60 # message (FormatTime("Y/m/d H:i:s" , t + 1800 - (t MOD 1800) ) ) call("TimerSet",i) return(i) endsub ### タイマーセット ### sub TimerSet runat(argv[1],Mortexe,TrainRunAtT) regwritedword("HKCU",gozen,"DownloadTime",argv[1]) endsub ### タイマー削除 ### sub TimerDelete removenotifications(Mortexe,TrainRunAtT) regwritedword("HKCU",gozen,"DownloadTime",0) endsub ### メッセージ表示 ### # タイマー起動の場合は表示しない sub PrintMessage if((RunAtTimer ne "ON") and (RunAtAutoexec ne "ON")) sleepmessage(SleepTime,argv[1]) endif endsub ### エラーメッセージ表示 ### # メッセージを表示して終了する sub PrintError call("PrintMessage",argv[1]) exit endsub ### Yes/No表示 ### # タイマー起動の場合はそのまま終了 sub PrintQuestion if((RunAtTimer eq "ON") or (RunAtAutoexec eq "ON")) exit endif return(question(argv[1])) endsub ### 運行情報データダウンロード ### sub TetsudoDownload # ダウンロードする地域のURL(Tetsudo.jp) TetsudoURL = URL_Tetsudo # データダウンロード download(TetsudoURL,DL_temp) # 読み込みに成功しているか if(fileexists(DL_temp)) showwaitcursor text = readfile(DL_temp,0,"utf8-prefix") AreaArray[1] = Array("shin1-1","shin2-1","shin4-1","shin5-1","shin6-1","shin7-1","shin8-1","shin9-1") AreaArray[2] = Array("kanto-1","meto-1","toei-1","tobu-1","sebu-1","ksei-1","ko-1","odaq-1","toq-1","kq-1","sote-1","tkymono-1","tsukuba-1","rinkai-1","urikamo-1") AreaArray[3] = Array("cent-1","nagoyashi-1","mete-1","kinte-1") AreaArray[4] = Array("kinki-1","osakashi-1","kinte-2","nan-1","khan-1","hanq-1","hanshin-1") AreaArray[5] = Array("qshu-1","fukuokashi-1","nishite-1") AreaArray[6] = Array("hokai-1","east1-1","east2-1","east3-1","west1-1","west2-1","shiko-1") ## 地区情報 # 開始文字列 TikuArray[1][1] = "

新幹線

" TikuArray[1][2] = "

関東エリア

" TikuArray[1][3] = "

東海エリア

" TikuArray[1][4] = "

近畿エリア

" TikuArray[1][5] = "

九州エリア

" TikuArray[1][6] = "

その他のエリア

" # 終了文字列 TikuArray[2][1] = "
" TikuArray[2][2] = "
" TikuArray[2][3] = "
" TikuArray[2][4] = "
" TikuArray[2][5] = "
" TikuArray[2][6] = "" ## 必要な所だけ切り出す textout = "" for j = 1 to MaxINdex( TikuArray[1] ) textout = textout & "^NL^" callfunction("BetweenStrings",Tetsudo[j] , text,1 , TikuArray[1][j] , TikuArray[2][j]) UnkouFlg [ j ] = "" for i = 1 to MaxIndex( AreaArray[j] ) callfunction("BetweenStrings",Tetsudo_temp , Tetsudo[j] , 1, AreaArray[j][i] , "") callfunction("BetweenStrings",Tetsudo_url[j][i] , Tetsudo_temp , 1, "*" , """ title") callfunction("BetweenStrings",Tetsudo_company[j][i] , Tetsudo_temp , 1, "general-anchor"">" , "") callfunction("BetweenStrings",Tetsudo_info[j][i] , Tetsudo_temp , 1, "alt=""" , """") callfunction("BetweenStrings",Tetsudo_time[j][i] , Tetsudo_temp , 1, "class=""updated"">" , "") Tetsudo_text[j][i] = "" # 運行情報あり if (Tetsudo_info[j][i] eq "△") # 一箇所目 callfunction("BetweenStrings",Line_temp , Tetsudo_temp , 1, "lines"">" , "") callfunction("BetweenStrings",Text_temp , Line_temp , 1, """>" , "") # 二箇所目以降 while(find(Line_temp , "general-anchor" , 1) > 0) callfunction("BetweenStrings",Text2_temp , Line_temp , 1, """>" , "") Tetsudo_text[j][i] = Tetsudo_text[j][i] & Text2_temp & "・" callfunction("BetweenStrings",Line_temp , Line_temp , 1, Text2_temp , "") endwhile Tetsudo_text[j][i] = SubStr(Tetsudo_text[j][i],1,Length(Tetsudo_text[j][i]) - 1) UnkouFlg[ j ] = "△" endif # 掲載時間外 if (Tetsudo_info[j][i] eq "−") callfunction("BetweenStrings",Tetsudo_text[j][i] , Tetsudo_temp , 1, "lines"">" , "") if (UnkouFlg[ j ] eq "") UnkouFlg[ j ] = "−" endif endif if (Tetsudo_info[j][i] eq "○") Tetsudo_text[j][i] = "正常運行" if (UnkouFlg[ j ] eq "") UnkouFlg[ j ] = "○" endif endif # レジストリの初期化 regwritestring("HKCU",gozen \ j \ i,"text1" , "") regwritestring("HKCU",gozen \ j \ i,"text2" , "") regwritestring("HKCU",gozen \ j \ i,"text3" , "") regwritestring("HKCU",gozen \ j \ i,"text4" , "") regwritestring("HKCU",gozen \ j \ i,"UrlFlg" , "") if (extReg) Switch ( Tetsudo_info[j][i] ) case ( "−" ) regwritestring("HKCU",gozen \ j \ i,"text1" , Tetsudo_text[j][i]) case ( "○" ) regwritestring("HKCU",gozen \ j \ i,"text2" , Tetsudo_text[j][i]) case ( "△" ) regwritestring("HKCU",gozen \ j \ i,"text3" , Tetsudo_text[j][i]) regwritestring("HKCU",gozen \ j \ i,"UrlFlg" , "※") case ( "×" ) regwritestring("HKCU",gozen \ j \ i,"text4" , Tetsudo_text[j][i]) EndSwitch endif # レジストリへの書き出し regwritestring("HKCU",gozen \ j \ i,"Company" , Tetsudo_company[j][i]) regwritestring("HKCU",gozen \ j \ i,"url" , Tetsudo_url[j][i]) regwritestring("HKCU",gozen \ j \ i,"info" , Tetsudo_info[j][i]) regwritestring("HKCU",gozen \ j \ i,"text" , Tetsudo_text[j][i]) regwritestring("HKCU",gozen \ j \ i,"time" , Tetsudo_time[j][i]) textout = textout & Tetsudo_company[j][i] & "," textout = textout & Tetsudo_url[j][i] & "," textout = textout & Tetsudo_info[j][i] & "," textout = textout & Tetsudo_text[j][i] & "," textout = textout & Tetsudo_time[j][i] & "^NL^" next Switch ( UnkouFlg[ j ] ) case ( "△" ) # △ regwritestring("HKCU", gozen \ j , "UnkouFlg" & "1", "") regwritestring("HKCU", gozen \ j , "UnkouFlg" & "2", "△") regwritestring("HKCU", gozen \ j , "UnkouFlg" & "3", "") case ( "○" ) regwritestring("HKCU", gozen \ j , "UnkouFlg" & "1", "○") regwritestring("HKCU", gozen \ j , "UnkouFlg" & "2", "") regwritestring("HKCU", gozen \ j , "UnkouFlg" & "3", "") case ( "−" ) regwritestring("HKCU", gozen \ j , "UnkouFlg" & "1", "") regwritestring("HKCU", gozen \ j , "UnkouFlg" & "2", "") regwritestring("HKCU", gozen \ j , "UnkouFlg" & "3", "−") EndSwitch next # GetTime( Hour, Min , Sec, Day, Month, Year ) # Tetsudoout = systempath("ScriptPath") \ "Tetsudo_Text_" & Year & Month & Day & "-" & Hour & Min & ".txt" # writefile(Tetsudoout,textout) regwritestring("HKCU",gozen,"ReleaseYMDT", formattime("Y年m月d日 H時i分 現在", TimeStamp())) ## 表示ページの更新 @@ x = 0 if ( NowPage = 3 ) x = 8 endif if ( NowPage > 2 ) v = NowPage - 1 else v = NowPage endif for i = 1 to 8 regwritestring("HKCU",gozen \ 0 \ i,"text1" , regread("HKCU",gozen \ v \ i + x, "text1")) regwritestring("HKCU",gozen \ 0 \ i,"text2" , regread("HKCU",gozen \ v \ i + x, "text2")) regwritestring("HKCU",gozen \ 0 \ i,"text3" , regread("HKCU",gozen \ v \ i + x, "text3")) regwritestring("HKCU",gozen \ 0 \ i,"text4" , regread("HKCU",gozen \ v \ i + x, "text4")) regwritestring("HKCU",gozen \ 0 \ i,"UrlFlg" , regread("HKCU",gozen \ v \ i + x, "UrlFlg")) regwritestring("HKCU",gozen \ 0 \ i,"Company" , regread("HKCU",gozen \ v \ i + x, "Company")) regwritestring("HKCU",gozen \ 0 \ i,"url" , regread("HKCU",gozen \ v \ i + x, "url")) regwritestring("HKCU",gozen \ 0 \ i,"info" , regread("HKCU",gozen \ v \ i + x, "info")) regwritestring("HKCU",gozen \ 0 \ i,"text" , regread("HKCU",gozen \ v \ i + x, "text")) regwritestring("HKCU",gozen \ 0 \ i,"time" , regread("HKCU",gozen \ v \ i + x, "time")) next # ジャンル名・表示ページを設定 regwritestring("HKCU",gozen ,"Category" , TitleArray[NowPage] ) regwritestring("HKCU",gozen ,"NowPage" , NowPage ) if (RDToday) regwritestring("HKLM", "Software\Microsoft\Today\Items\HomeScreen PlusPlus", "Command" , "1") endif hidewaitcursor return(0) else ### ダウンロードに失敗した call("PrintMessage","運行情報データがダウンロードできませんでした") return(1) endif endsub ### 指定文字列までの文字列を返す ### # in....[1] 対象文字列 # [2] 検索位置 # [3] チェックする文字列 # out...ret() 取得文字列 # x 検索後の位置 sub BeforeStrings local(i) i = find(argv[1],argv[3],argv[2]) switch(1) case(i = 1) return("") x = i + length(argv[3]) case(i > 1) return(substr(argv[1],argv[2],i - argv[2])) x = i + length(argv[3]) case(i = 0) return("") x = argv[2] endswitch endsub ### 指定文字列以降の文字列を返す ### # in....[1] 対象文字列 # [2] 検索位置 # [3] チェックする文字列 # out...ret() 取得文字列 # x 常に1 sub AfterStrings local(i) i = find(argv[1],argv[3],argv[2]) if(i) return(substr(argv[1],i + length(argv[3]))) else return("") endif x = 1 endsub ### 指定文字列間の文字列を返す ### # in....[1] 対象文字列 # [2] 検索位置 # [3] 最初の文字列 # [4] 最後の文字列 # [5] [返り血の文字数制限] # out...ret() 取得文字列 # x 検索後の位置 sub BetweenStrings local(i,text) i = find(argv[1],argv[3],argv[2]) text = "" if(i) i = i + length(argv[3]) x = find(argv[1],argv[4],i) if(x) text = substr(argv[1],i,x-i) x = x + length(argv[4]) endif else x = argv[2] endif # 返り値の制限の有無 if(argc > 4) return(substr(text,1,argv[5])) else return(text) endif endsub