#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #SHARPフォン・サポートHB #ShPhone_Sp_HB.mscr #通話時画面を消灯し電池を節約、 #また、どうせならとgChargeAlarm※風機能もあるMortScript。 #誰とでも定額用に10分以内の指定も可能です。 #※gChargeAlarm = ウィルコムの定額プラン無料範囲の165分以内に #警告を出して自動的に通話終了してくれる素晴らしいソフト。 #他機能が不要なら、軽く高機能なgChargeAlarmを是非使いましょう。 #●使用方法概要 #いくつかの動作は本文中の環境設定により変更できます。 #・使用の準備を整えます。(詳細は後述) #・通話を開始すると、設定が有効なら画面を消灯してくれます。 #・その際画面が再び点灯した時は、指定時間後にまた消灯します。 #・通話終了タイマーが有効なら、終了の指定分前に警告を行います。 #・通話終了タイマーが有効なら、経過後に自動で通話を終了します。 #・警告方法は設定によってバイブか音、または両方が利用できます。 #時間を扱う処理なので、流れの詳細を説明をしておきますと、 #非常駐で1秒、常駐で3秒以内に、着信を発見して計測を開始します。 #もし計測にズレが出た場合は、1分おきに1秒単位で修正を行います。 #この修正は計測開始時点の時刻を基準にしているので、 #1秒未満のズレが加算しても1秒に達した時点で、修正されます。 #1分以上ズレた場合は、処理指定時刻を1分引いて再調整します。 #以上から1分以上のズレが起こる事はほとんど無いと思いますが、 #念のため終了時間の指定には余裕を持たせて下さい。 #●使用の準備 #別途、拙作の"Trigger_ShPhone.mscr"を利用すれば、 #特に複雑な設定をする事無く、本mscrを使用できます。 #その他のプログラムも複数、電話挙動と連動させることができます。 #この方法が最も安定して動作すると思います。 #または、"cmdRegistryNotifyApp"をインストールした上で #本文設定AutocRNApp=1にし、本mscrを実行すれば非常駐動作します。 #通話開始を検知して作動するmscrが、他に無いことが条件です。※ #常駐利用の際は、本文設定Always=1にして本mscrを起動して下さい。 #"\Windows\スタートアップ"にショートカットを置くと良いと思います。 #自前で動作環境を構築する場合は、Always=0、AutocRNApp=0にして、 #[HKEY_LOCAL_MACHINE\System\State\Phone] #"Status"=dword:20200032(16進)(通話中) #を、トリガーにして本mscrを起動するようにして下さい。 #"MortScript" "RegCondExec" が有用だと思います。 #または通話時に本mscrを実行できる環境を用意して下さい。 #●動作確認デバイス #HYBRID W-ZERO3 #SHARPの電話アプリが対象なので、その他機種は動かないと思います。 #●必要環境 #・MortScript4.1以上(それ以下でも動くかも)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #●補足事項 #・Trigger_ShPhone_HB (電話状態で指定アプリ群起動) # http://www.ac-promenade.net/text/windowsmobile/index.html#Trigger_ShPhone_HB #・gChargeAlarm (常駐して連続通話2時間45分以内に強制切断) # http://www.zob.ne.jp/~goripon/wince/ #・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 #WM6.5から消灯時も画面タッチ反応するようなのでご注意ください。 #※他に、これと同一タイミングで起動するmscrを利用している場合、 #MortScript.exe本体が行う複数タスク管理中に実行されたmscrは、 #処理を無視される場合があります。 #これを回避するには、"MortScript"や"ExecMulti"等を利用して #各mscrの起動タイミングを、ほんの少しずらす様にして下さい。 #アンインストールの際は、"AutocRNApp"による #登録を行っていれば解除して、本mscrを削除するだけで大丈夫です。 #必要なければ、ログファイルやそのフォルダパスも削除して下さい。 #その他レジストリの追加、別ファイルの作成等は行っていません。 #本mscrによって生じる不利益に当方は関与しません。 #設定変数値を除く内容に改ざんがない限り、再配布は自由です。 #内容に変更を加えた際の再配布は、必ずその変更前と変更後の #明記を、本文中にて行ってあれば構いません。 #--------------------------------------------------------------- #以下環境設定 #(書き換えの際、文字コードS-JISが変換されないよう御注意下さい。) #■本mscrを、cmdRegistryNotifyAppで登録し実行する=1、しない=0。 #また登録用、解除用それぞれのパスも合わせて下さい。 #初回実行時のみ登録/解除を行います。後はそのまま使用して下さい。 #本mscrの名前やパスを変更した場合、再度実行すれば再登録します。 #注意!本mscrを削除する際は、事前に=0にして解除実行して下さい。 #予めファイル名に任意の文字を加えておけば、忘れないと思います。 AutocRNApp=0 cRNAppPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryNotifyApp.exe" cRStopPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryStopNotification.exe" #■本mscrを常駐利用する=1、しない=0。 Always=0 #■通話中、画面消灯を何分毎に行うか、整数(分単位)で指定。 #=0にすれば、消灯しなくなります。 DispOffTime=1 #■通話開始から、何分後に通話を切るか、整数(分単位)で指定。 #=0にすれば、gChargeAlarm風機能に関わる全ての処理を行いません。 TermTime=160 #■実際に通話終了を行うなら=1、=0なら警告だけの利用ができます。※ AutoTerm=1 #■通話終了の何分前に警告するか、相対時間を整数(分単位)で指定。 PreAlertTime=1 #■事前警告に音を利用するなら=1、でなければ=0。 #(環境に依らず音が鳴る手段として、1のプッシュ音を2回発します。) #(ベル打ち仕様の方は、=2にして下さい。9,6押しを試行します。) Sound=0 #■事前警告にバイブを利用するなら=1、でなければ=0。 Vibrate=1 #※ウルテク、AutoTerm=0にして切断を行わないようにすると、 #TermTime分後はカウントがリセットされるので、 #TermTime=3、PreAlertTime=1とすれば、 #開始2分後に警告、以後3分毎に繰り返し警告が鳴る、 #といった事が一応できます。AutocRNApp=0の上で本mscrを複製し、 #定期警告用と切断用を同時に走らせるとかもアリかもしれません。 #--------------------------------------------------------------- #バージョン履歴 #1.00 公開。 #--------------------------------------------------------------- #Main Script #■PPC制限 If(MortScriptType() ne "PPC") message("This script is PPC only.") Exit EndIf #■cmdRegistryNotifyApp登録/解除 If(AutocRNApp=1) Always=0 EndIf Call ("AutocRNAppChk") #■メイン RegLockPhone="RegRead (""HKLM"",""System\State\Phone"",""Status"")" Loop=1 While ( (Loop=1) or (Eval (RegLockPhone)=538968114) or (Always=1) ) Loop=0 #■準備(DispOffは先行して行いたいので、+1して処理を待機より前に) StartTime=TimeStamp() DispOffCount=DispOffTime TermCount=1 AlertFlag=0 CallFlag=0 AddTime=60 RestTime=60 #If (ConnectVib=1) # Vibrate (ConVibTime) #EndIf If ( (DispOffTime>=1) and (Eval (RegLockPhone)=538968114) ) ToggleDisplay (False) EndIf #■通話中ループ開始 While (Eval (RegLockPhone)=538968114) CallFlag=1 #■1分(-補正時間)静止 #Sleep (RestTime) RestMod = (RestTime - 1) mod 5 RestCount = (RestTime - RestMod - 1) / 5 Sleep ((RestMod + 1) * 1000) While ( (Eval (RegLockPhone)=538968114) and (RestCount>=1) ) Sleep (5000) RestCount=RestCount-1 EndWhile #■画面オフルーチン If (DispOffTime>=1) DispOffCount=DispOffCount+1 If ( (DispOffCount>DispOffTime) and (Eval (RegLockPhone)=538968114) ) ToggleDisplay (False) DispOffCount=1 EndIf EndIf #■自動終話ルーチン If (TermTime>=1) TermCount=TermCount+1 #アラートは切断より前に鳴らしたいので、指定がどうあれアラートフラグ後切断。 If (AlertFlag=0) If ( (TermCount>TermTime-PreAlertTime) and (Eval (RegLockPhone)=538968114) ) If (Sound=1) SendSpecial (49) sleep (1000) SendSpecial (49) sleep (1000) #SendLeftSoft ("電話 ") ElseIf (Sound=2) SendSpecial(57) SendSpecial(54) sleep (1000) SendSpecial(57) SendSpecial(54) sleep (1000) #SendLeftSoft ("電話 ") EndIf ToggleDisplay (True) If (Vibrate=1) Vibrate (200) Sleep (200) Vibrate (200) EndIf DispOffCount=1 AlertFlag=1 EndIf ElseIf ( (TermCount>TermTime) and (Eval (RegLockPhone)=538968114) ) If (AutoTerm=1) SendSpecial (115) Sleep(1000) ToggleDisplay (True) EndIf TermCount=1 AlertFlag=0 EndIf EndIf #■時刻修正処理 AddTime=AddTime+60 RestTime=(StartTime-TimeStamp()+AddTime) If (RestTime<0) DispOffCount=DispOffCount+1 TermCount=TermCount+1 AddTime=AddTime+60 RestTime=60 EndIf EndWhile #■常駐用待機 If (Always=1) Sleep (1000) If (Eval (RegLockPhone)<>538968114) ErrorLevel ("syntax") WaitForActive ("電話 ",58) ErrorLevel ("error") EndIf Sleep (1000) EndIf EndWhile #--------------------------------------------------------------- #Sub Script #■Call ("AutocRNAppChk") cmdRegistryNotifyApp登録/解除 Sub AutocRNAppChk cmdID="Phone_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="HKLM;System\State\Phone;Status" cmdComp=1 cmddwMask="-" cmddw=538968114 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