# autoSTMail / full of universe (f-u.seesaa.net) # W-ZERO3メールを起動、またはアクティブにして最適な位置まで移動する # このとき、自動振り分け機能を使用している場合は振り分け先のフォルダへ移動させることも可能 # 新着メールが1件であればそのメールの個別閲覧画面まで移動する(W-ZERO3メールの並び替えを未読優先にしておくこと) # 複数アカウントを設定している場合でも、ウィルコムアカウントを開く # メールの新規作成、下書きの編集をしていたら保存してから移動する # 2008-10-09 autoSTMail公開開始 # 2008-11-02 既にW-ZERO3メールが起動しているときの処理を最適化 # 2008-11-07 複数アカウントに対応 # 2008-11-08 ウィルコムアカウント名の変更に対応 # 2009-10-21 自動振り分け機能に対応 # ----------設定ここから---------- # ウィルコムアカウント名(デフォルトの「070~」で始まる電話番号なら空白のままでいい) name="" # W-ZERO3メールに登録しているアカウントの数(ウィルコムアカウントしか使っていなければ1でいい) account=1 # 新着メールの振り分け # 0:設定していない(常に受信フォルダへ移動) # 1:設定している(振り分け先フォルダへ移動) # この値を0とした場合、これより下の設定はしなくてもよい(設定しても無効となる) sort=0 # 新着メールが1件ではない場合(新着メールなし、または2件以上のとき)に受信ボックスを表示するか # 0:受信フォルダまで移動 # 1:受信ボックスを表示 box=0 # 振り分けに使用しているフォルダの数 # 受信フォルダ名は初期状態のままである必要があり、また新しく作成した場合も「フォルダ(半角カタカナ)+1桁の半角数字」としなければならない # 今のところ「フォルダ9」まで対応(横画面では「フォルダ5」あたりまで対応) # 「受信フォルダ」 # 「フォルダ1」 # 「フォルダ2」 # 「フォルダ3」 # 例えば、「受信フォルダ」「フォルダ1」を振り分け先に設定している場合は値を「2」とする # また、「受信フォルダ」「フォルダ2」を振り分け先に設定している場合は上から数えて「3」とする(「フォルダ1」を使ってなくても) # つまり、振り分け先に設定しているフォルダのうち一番下のフォルダを上から数えた値、これを設定する folder=2 # 新着メールの振り分け先フォルダ判定のモード(通常は1でいい) # 1:簡易判定モード # 2:厳密判定モード mode=1 # 厳密判定モードの判定レベル(0~30:大きくなるほど厳密になるが通常は0でいい) level=0 # ----------以下は基本的にはイジる必要なし---------- w[0]="W-ZERO3メール " p="\Windows\STMail.exe" f=FileBase(p)&FileExt(p) # 各階層のウィンドウタイトル w[1]="W-ZERO3メール " w[2]="メールボックス" w[3]="メールリスト" w[4]="W-ZERO3メール " If(ProcExists(f)) # 個別メール画面(受信メール、送信メール、下書き、新規メール)を閉じる Call("close",4) If(WndExists(w[3])) # 階層3→階層1(受信ではない場合) Call("rewind",3) ElseIf(WndExists(w[2])) # 階層2→階層1(受信ではない場合) Call("rewind",2) Else # 階層1ではないなら開き直す Call("close",1) EndIf Else Run(p) WaitFor(w[1],5) EndIf If(NOT WndExists(w[2])) # 階層1→階層2 Call("forward",1) ElseIf(NOT WndExists(w[3])) # 階層2→階層3 Call("forward",2) Else # 階層3→個別メール画面(未読メール1件の場合) Call("forward",3) EndIf Sub titlecheck Local(t,wt) # 階層1(portrait:0,56-350,92)(landscape:0,56-350,92) If(name eq "") t[1]="070" Else t[1]=name EndIf # 階層2(0,52-480,98)(0,52-800,98) t[2]="受信ボックス" # 階層3(0,52-480,98)(0,52-800,98) t[3]="受信フォルダ" # 個別メール画面(受信メール、送信メール)(0,54-480,748)(0,54-800,428) t[4][1]="本文・件名" # 個別メール画面(下書き、新規作成) t[4][2]="W-ZERO3メール " wt=WindowText(0,56) If(argv[1]<>4) If(argv[1]=1 && name eq "") wt=SubStr(wt,1,3) EndIf Return(wt eq t[argv[1]]) Else Return((wt eq t[4][1])+(wt eq t[4][2])) EndIf EndSub Sub close Local(c,t) Switch(argv[1]) Case(4) If(WndExists("お知らせ")) SendOK("お知らせ") EndIf If(NOT WndActive(w[0])) Show(w[0]) WaitForActive(w[0],5) EndIf CallFunction("titlecheck",c,4) If(c) # ウィンドウタイトルが重複しているため指定してのSendOK()はできず、また指定しないでSendOK()してもW-ZERO3メールが終了してしまう # そのため、クリックによってフォーカスを移しアクティブウィンドウにキーコードを送る MouseClick(0,54) # OKキー SendSpecial(92,"down") SendSpecial(117,"down") SendSpecial(117,"up") SendSpecial(92,"up") Sleep(500) # メール作成中、または下書きを開いている場合には保存する If(WndExists("確認")) SendCR("確認") EndIf EndIf Case(1) CallFunction("titlecheck",c,1) # 空白のときは明らかに違うウィンドウを開いているので除外する If(WindowText(0,56) ne "") # フォーカスを移しウィルコムアカウントを選択できれば選択(4,58-350,90) MouseClick(4,58) t=1 While(NOT c && t1 && account>1) || (((t>2 && sort) || NOT c) && account=1)) SendOK(w[t]) While(WndExists(w[t])) Sleep(100) EndWhile Sleep(500) While(NOT WndExists(w[t])) t=t-1 EndWhile CallFunction("titlecheck",c,t) If(t=1) # フォーカスを移しウィルコムアカウントを選択(4,58-350,90) MouseClick(4,58) While(NOT c) SendUp(w[t]) Sleep(100) CallFunction("titlecheck",c,t) EndWhile SendCR(w[t]) SendDown(w[t]) EndIf EndWhile EndSub Sub forward Local(unread,t,c,s,i) unread=RegRead("HKCU","\Software\Sharp\PhoneStatus","Status14")=1 t=argv[1] While(t<4) If(((t=2 && sort && box) || t=3) && NOT unread) SendHOME(w[t]) Exit EndIf CallFunction("titlecheck",c,t) If(c || s) SendHOME(w[t]) If(t=2 && sort && unread) i=0 While(i1) Repeat(i-1) SendDown(w[t]) EndRepeat EndIf Else # 振り分け先判定がうまくいかなかった場合 Exit EndIf EndIf SendCR(w[t]) WaitFor(w[t+1],5) EndIf t=t+1 EndWhile EndSub Sub sortcheck Local(x,y,xincr,yincr,weight,i,j) # 判定を開始するx座標 If(argv[1]=0) x=226 Else x=177 EndIf # 判定を開始するy座標 y=118+48*argv[1] If(y>ScreenHeight()) Exit EndIf # 判定する範囲(つまり(x,y)から(x+xincr,y+yincr)まで判定) xincr=1 yincr=14 If(mode=1) x=x+xincr/2 y=y+yincr/2 Return(ColorAt(x,y)=RGB(0,0,255)) ElseIf(mode=2) weight=(xincr+1)*(yincr+1) If(weightRGB(0,0,255)) weight=weight-1 EndIf Next Next Return(weight>level) Else Message("判定モードが正しくありません。設定を見直してください。","判定モードエラー") Exit EndIf EndSub Exit