#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #STメール (W-ZERO3メール) ・サポート #STMail_Sp.mscr #W-ZERO3メールの多々操作をなるべく簡略化させるMortScript。 #メール送信を開始したらすぐポケットにしまっても、 #送信成功と同時に終了したり、新着が届けば自動展開したりします。 #●使用方法概要 #いくつかの動作は本文中の環境設定により変更できます。 #・使用の準備を整えます。(詳細は後述) #・本mscrを適用後、W-ZERO3メールは通常通りに起動、使用します。 #・設定により、"Eメール(ウィルコム)"に移るターゲットを戻せます。 #・受信後は、設定が有効なら自動的にW-ZERO3メールを起動します。 #・受信したアカウントで既に起動してあれば、何もしません。 #・設定によりW-ZERO3メール起動時、未読直前まで自動展開します。 #・送信成功後、設定によりW-ZERO3メールを自動終了できます。 #・送受信の結果窓を、自動スキップできます。(まとめて受信を除く) #・送受信に失敗した際は、再送受信を即行うダイアログが出せます。 #・複数アカウントにも対応しています。 #送信成功後のW-ZERO3メール自動終了の例外として、 #・同時に新たな新着メールが届いた時はそのままの状態になります。 #・過去の未読が残っている時は、設定により終了を判断できます。 #●使用の準備 #非常駐利用する際は"cmdRegistryNotifyApp"をインストールした上で、 #本文設定AutocRNApp=1にし、本mscrを実行すれば自動適用します。 #この方法が最も安定して動作すると思います。※ #常駐利用の際は、本文設定Always=1にして本mscrを起動して下さい。 #"\Windows\スタートアップ"にショートカットを置くと良いと思います。 #自前で動作環境を構築する場合は、Always=0、AutocRNApp=0にして、 #[HKEY_CURRENT_USER\Software\Sharp\ShPhoneLib] #"2ndRingFrEmailapp"=dword:0000000(10進)(メール通信時) #を、トリガーにして本mscrを起動するようにして下さい。 #"MortScript" "RegCondExec" が有用だと思います。 #●動作確認デバイス #Advanced/W-ZERO3[es], WILLCOM 03 #他ZERO3系デバイスのW-ZERO3メールの仕様は不明です。 #W-ZERO3メールが対象なので、その他機種は動かないと思います。 #もし他のWindows Mobile機でも動いたらご報告頂けると嬉しいです。 #●必要環境 #・MortScript4.1以上(それ以下でも動くかも)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #●補足事項 #・cmdRegistryNotifyApp (非常駐でレジストリを監視) # http://ssipa.web.fc2.com/ #・RegCondExec (常駐してレジストリを監視) # http://www20.atwiki.jp/zero3_392/pages/10.html #・ExecMulti (複数アプリの起動代行管理) # http://www.momo-lab.net/inu/execmulti.html #W-ZERO3メール本体自体が重くなってきたと感じたら、 #別のフォルダに既読のメールを移動させれば軽くなります。 #※他に、これと同一タイミングで起動するmscrを利用している場合、 #MortScript.exe本体が行う複数タスク管理中に実行されたmscrが、 #処理を無視される場合があります。 #これを回避するには、"MortScript"や"ExecMulti"等を利用して #各mscrの起動タイミングを、ほんの少しずらす様にして下さい。 #アンインストールの際は、"AutocRNApp"による #登録を行っていれば解除して、本mscrを削除するだけで大丈夫です。 #その他レジストリの追加、別ファイルの作成等は行っていません。 #本mscrによって生じる不利益に当方は関与しません。 #設定変数値を除く内容に改ざんがない限り、再配布は自由です。 #内容に変更を加えた際の再配布は、必ずその変更前と変更後の #明記を、本文中にて行ってあれば構いません。 #--------------------------------------------------------------- #以下環境設定 #(書き換えの際、文字コードS-JISが変換されないよう御注意下さい。) #■本mscrを、cmdRegistryNotifyAppで登録し実行する=1、しない=0。 #また登録用、解除用それぞれのパスも合わせて下さい。 #初回実行時のみ登録/解除を行います。後はそのまま使用して下さい。 #本mscrの名前やパスを変更した場合、再度実行すれば再登録します。 #注意!本mscrを削除する際は、事前に=0にして解除実行して下さい。 #予めファイル名に任意の文字を加えておけば、忘れないと思います。 AutocRNApp=1 cRNAppPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryNotifyApp.exe" cRStopPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryStopNotification.exe" #■本mscrを常駐利用するなら=1、でなければ=0。 Always=0 #■本mscrが対象とするアカウントの限定設定。 #利用している全アカウントを対象とするならAccount[1]=""と空白に。 #対象アカウントを限定するなら""内にアカウント名を記入。 #限定対象が複数なら、行を追加し連番でAccount[2]="アカウント名"。 Account[1]="" #■"Eメール(ウィルコム)"の通知が出たら元に戻す=1。戻さない=0。 EmailNtfSkip=1 #■メール受信後W-ZERO3メールを自動起動する=1。しない=0。 AutoStExec=1 #■WILLCOM 03ならば手動受信でも自動展開を行う=1、でなければ=0。 #他機種は、メール一覧が常に表示されているので必要ないです。 WillZT=0 #■未読がある時のW-ZERO3メール起動、自動展開Enter処理数。 #予めEnterキーを押させて1ステップ展開するなら=1、でなければ=0。 #WILLCOM 03利用時は、=2で2回押しができます。 #本文展開まで進むと"開封"するので、直前までの処理に留めてます。 #フォルダ振り分けは無視するので、使用に合わせて調整して下さい。 MoreEnter=1 #■送受信後のメッセージをスキップする猶予を、整数秒で指定。 #その間にokを押すと、以後の自動終了や自動展開を中断できます。 #=0でも、処理上若干の猶予があります。 SuccessWait=0 #■送信成功後、以下の状態では自動終了しない=1、無視する=0。 #(未読がある、キーロックしていない、キーボード展開中。) UnReaded=1 KeyLockOff=0 KeySlideOpen=0 #■送信成功通知の効果音用wavファイルパス、使わないなら""内空欄。 #音サンプル: \Windows\spl_success.wav SucSound="\Windows\spl_success.wav" #■送信成功の通知にバイブを使うなら=1、使わないなら=0。 SucVibrate=0 #■送信失敗通知の効果音用wavファイルパス、使わないなら""内空欄。 #音サンプル: \Windows\spl_error.wav ErrSound="" #■送信失敗の通知にバイブを使うなら=1、使わないなら=0。 ErrVibrate=1 #■送信失敗時の、再送受信ダイアログを利用する設定。 #本体ファームに依存します。Advanced/W-ZERO3[es] 2.01なら=2568、 #WILLCOM 03 1.5(1.5a) Advanced/W-ZERO3[es] 2.02aなら=40126です。 #対応ファームが分からないか、使用しないのであれば=0。 Farmware=0 #■送信エラー後の再試行を、送信のみにするなら=1、でなければ=0。 ReSendOnly=0 #--------------------------------------------------------------- #バージョン履歴 #1.05 1.04で直っていなかったリロードを修正。 #1.04 1.02で直っていなかったリロードと、EmailNtfSkip機能を修正。 #1.03 ほんのわずかなコード整理。(恩恵があるかは微妙) #1.02 Ad[es](他?)で偶に受信フォルダをリロードしていたのを修正。 #1.01 WillZT=1の機能が働いていなかったのに気付いて修正。 #1.00 公開。 #--------------------------------------------------------------- #Main Script #■PPC制限 If(MortScriptType() ne "PPC") message("This script is PPC only.") Exit EndIf Call ("EmailNtfSkp") #■cmdRegistryNotifyApp登録/解除 If(AutocRNApp=1) Always=0 EndIf Call ("AutocRNAppChk") RegRingEmail="RegRead (""HKCU"",""Software\Sharp\ShPhoneLib"",""2ndRingFrEmailapp"")" RegEmAutoRecv="RegRead (""HKCU"",""Software\Sharp\ShPhoneLib"",""EmAutoRecv"")" RegLastAcc="RegRead (""HKCU"",""Software\Sharp\STMail"",""LastSelectAccount"")" RegKeyLock="RegRead (""HKCU"",""Software\Sharp\PhoneStatus"",""Status0"")" RegUsbDetect="RegRead (""HKLM"",""Drivers\USB\FunctionDrivers"",""UsbCableDetect"")" RegSlideKey="RegRead (""HKLM"",""HARDWARE\DEVICEMAP\KEYBD"",""Style"")" #■アカウント調査 If (Account[1] eq "") i=1 ForEach FEBox in regSubkeys ("HKCU","Software\Sharp\STMail\Accounts") Account[i]=FEBox i=i+1 EndForEach EndIf #■メイン処理 Loop=1 While ( (Loop=1) or (CheckRead>=1) or (Always=1) or (Eval (RegRingEmail)=0) ) Loop=0 Call ("AccReadChk") #■送受信チェック処理 While (Eval (RegRingEmail)=0) Call ("EmailNtfSkp") #■処理前データチェック PreRead=CheckRead Call ("AccDateChk") PreDate=CheckDate #■処理中待機、起動も監視 EmAutoRecv=Eval (RegEmAutoRecv) While (Eval (RegRingEmail)=0) WaitTime=3 Call ("WaitSTMail") EndWhile Sleep (1800) #■処理後データチェック Call ("AccReadChk") PostRead=CheckRead Call ("AccDateChk") PostDate=CheckDate #■結果、手動送受信時 If (EmAutoRecv=0) If (SuccessWait>=1) Sleep ((SuccessWait*1000) EndIf #■手動成功 If (PreDate=1))\ or ((KeyLockOff=1) and (Eval (RegKeyLock)=0))\ or ((KeySlideOpen=1) and (Eval (RegSlideKey)=1)) ) Else Close ("W-ZERO3メール ") EndIf EndIf #■受信成功 ElseIf (PreRead0) ) WaitForActive ("W-ZERO3メール ",5) EndWhile ErrorLevel ("error") Sleep (300) If ( WndActive ("W-ZERO3メール ") and (AutoStExec=1) ) Call ("ExecSTMail") EndIf EndIf EndIf #■手動失敗 Else If (WndExists ("お知らせ")) SendOK ("お知らせ") ElseIf (WndExists ("エラー")) SendOK ("エラー") ErrorLevel ("syntax") WaitForActive ("確認",1) ErrorLevel ("error") If (ErrVibrate=1) Vibrate (200) Sleep (300) Vibrate (200) EndIf PlaySound (ErrSound) If ( Not WndExists ("確認") and (Farmware<>0) ) If (ReSendOnly=1) ju="" Else ju="受" ReSendOnly=0 EndIf If (Not (Question ("再送"&ju&"信しますか?","Error","RetryCancel")=CANCEL)) SendCommand("W-ZERO3メール ", Farmware-ReSendOnly) Sleep (1000) EndIf EndIf EndIf EndIf #■結果、新着メール自動受信時 Else #メール容量肥大化時?の措置 i=1 While ( (i<=3) and ((PostRead=PreRead) or (PostDate=PreData)) ) Sleep (1000) Call ("AccReadChk") PostRead=CheckRead Call ("AccDateChk") PostDate=CheckDate i=i+1 EndWhile If ( (PreDate=1) ) WaitTime=5 Call ("WaitSTMail") EndIf Call ("EmailNtfSkp") EndWhile #--------------------------------------------------------------- #Sub Script #■Call ("AccReadChk") アカウント未読チェック Sub AccReadChk CheckRead=0 ForEach FEBox in array ("Account") CheckRead = CheckRead + RegRead("HKCU","Software\Sharp\STMail\Accounts"\FEBox,"NoRead") EndForEach EndSub #■Call ("AccDateChk") アカウント更新日時チェック Sub AccDateChk CheckDate=0 ForEach FEBox in array ("Account") CheckDate = CheckDate + FileModifyTime ("\Application Data\SeeTooMail\Accounts"\FEBox\"Storage\DATA\Status.txt") EndForEach EndSub #■Call ("EmailNtfSkp") Eメール(ウィルコム)通知スキップ Sub EmailNtfSkp If (EmailNtfSkip=1) If (WndActive ("Eメール(ウィルコム)")) Minimize ("Eメール(ウィルコム)") Sleep (300) EndIf EndIf EndSub #■Call ("WaitSTMail") W-ZERO3メール 待機 Sub WaitSTMail If ( Not ProcExists ("STMail.exe") and (CheckRead>=1) ) ErrorLevel ("syntax") WaitFor ("W-ZERO3メール ",WaitTime) ErrorLevel ("error") If (ProcExists ("STMail.exe")) ChkMoreEnter=1 Call ("ExecSTMail") EndIf Else Sleep (WaitTime*1000) EndIf EndSub #■Call ("ExecSTMail") W-ZERO3メール 起動 Sub ExecSTMail i=1 ForEach FEBox in array ("Account") If (RegRead ("HKCU","Software\Sharp\STMail\Accounts"\FEBox,"NoRead")>0) NewTime[i]=FileModifyTime ("\Application Data\SeeTooMail\Accounts"\FEBox\"Storage\DATA\Status.txt") NewAcc[i]=FEBox i=i+1 EndIf EndForEach ValLastAcc=Eval (RegLastAcc) If (i=1) WillOpenAcc=ValLastAcc Else WillOpenAcc=NewAcc[MaxIndex (NewTime)] EndIf If ( Not ProcExists ("STMail.exe") or (WillOpenAcc ne ValLastAcc) or (WillZT=1) ) ChkMoreEnter=1 Run ("\Windows\STMail.exe","-a """&WillOpenAcc&"""") ErrorLevel ("syntax") WaitFor ("W-ZERO3メール ",15) ErrorLevel ("error") #Sleep (300) EndIf If (ChkMoreEnter=1) If ( (MoreEnter>=1) and ProcExists ("STMail.exe") and (CheckRead>=1) ) If (Not WndExists ("メールボックス")) SendCR ("W-ZERO3メール ") EndIf If (MoreEnter>=2) ErrorLevel ("syntax") WaitFor ("メールボックス",5) ErrorLevel ("error") #Sleep (300) If WndExists ("メールボックス") SendCR ("メールボックス") EndIf EndIf EndIf EndIf ChkMoreEnter=0 EndSub #■Call ("AutocRNAppChk") cmdRegistryNotifyApp登録/解除 Sub AutocRNAppChk cmdID="STMail_Sp.AutocRNApp" ThisFilePath=SystemPath ("ScriptPath")\SystemPath ("ScriptName")&SystemPath ("ScriptExt") MortScriptPath=SystemPath ("ScriptExe")\"MortScript.exe" RegNtfKeyExs="RegKeyExists (""HKLM"",""System\Notifications\"&cmdID&""")" RegNtfAppVal="RegRead (""HKLM"",""System\Notifications\"&cmdID&""",""Application"")" AutocRNAppRsl=0 If (AutocRNApp=0) If (Eval (RegNtfKeyExs)=1) If ( FileExists (cRNAppPath) and FileExists (cRStopPath) ) SetOff="3;"&cmdID Run (cRStopPath,SetOff) AutocRNAppRsl=1 Else AutocRNAppRsl=2 EndIf EndIf ElseIf (Eval (RegNtfAppVal) ne """"&MortScriptPath&""" """&ThisFilePath&"""") If ( FileExists (cRNAppPath) and FileExists (cRStopPath) ) cmdReg="HKCU;Software\Sharp\ShPhoneLib;2ndRingFrEmailapp" cmdComp=1 cmddwMask="1" cmddw=0 SetOff="0;"&cmdID RunWait (cRStopPath,SetOff) Sleep (300) SetOn="3;"&cmdID&";"&cmdReg&";"&MortScriptPath&";'"""\ &ThisFilePath&"""';-;-;-1;1;"&cmdComp&";"&cmddwMask&";"&cmddw Run (cRNAppPath,SetOn) AutocRNAppRsl=1 Else AutocRNAppRsl=2 EndIf EndIf If (AutocRNAppRsl=1) Exit ElseIf (AutocRNAppRsl=2) If (Not FileExists (cRNAppPath)) Message ("cmdRegistryNotifyApp.exe^NL^が見つかりません。") EndIf If (Not FileExists (cRStopPath)) Message ("cmdRegistryStopNotification.exe^NL^が見つかりません。") EndIf Exit EndIf EndSub