#http://www.ac-promenade.net/text/windowsmobile/ #Scripted by AC-Promenade http://www.ac-promenade.net/ #SHARPフォン・サポート #ShPhone_Sp.mscr #通話時画面を消灯し電池を節約、耳の接触にも反応しなくなり、 #必要なら通話時間のログをテキストファイルに保存でき、 #また誰とでも定額オプションとウィルコム定額プラン用に #2段階のアラートを指定できます。 #●使用方法概要 #いくつかの動作は本文中の環境設定により変更できます。 #・使用の準備を整えます。(詳細は後述) #・通話が開始すると、画面を消灯する設定が可能です。 #・画面が再び点灯した時は、指定時間後にまた消灯します。 #・通話が指定時間を経過したら、警告を行うようにできます。 #・警告方法は設定によってバイブか音、または両方が利用できます。 #・警告は短時間と長時間用に、2段階まで設定できます。 #・さらに通話を強制的に終了する通話時間も、別途指定できます。 #・設定により、通話記録をテキストログに残すことができます。 #・ViewText等を使用していれば、同時にToday更新も設定できます。 #時間を扱う処理なので、流れの詳細を説明をしておきますと、 #非常駐で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_CURRENT_USER\Software\Sharp\PhoneApp] #"LockPhone"=dword:00262145(10進)(通話中) #を、トリガーにして本mscrを起動するようにして下さい。 #"MortScript" "RegCondExec" が有用だと思います。 #または通話時に本mscrを実行できる環境を用意して下さい。 #WS007SHなら"DenwaPlus"というソフトがあります。 #●動作確認デバイス #Advanced/W-ZERO3[es], WILLCOM 03も動くと思います。 #他ZERO3系デバイスでも、動くかもしれません。 #SHARPの電話アプリが対象なので、その他機種は動かないと思います。 #もし他のWindows Mobile機でも動いたらご報告頂けると嬉しいです。 #●必要環境 #・MortScript4.2(他のバージョンは未確認)、mscrの関連付け。 # http://www.sto-helit.de/ (PCサイト) #●補足事項 #・Trigger_ShPhone (電話状態で指定アプリ群起動) # http://www.ac-promenade.net/text/windowsmobile/index.html#Trigger_ShPhone #・ViewText (txtファイルをTodayに表示してくれます、必要なら) # http://www.dream-seed.com/weblog/archives/2006/12/viewtext_12/ #・cmdRegistryNotifyApp (非常駐でレジストリを監視) # http://ssipa.web.fc2.com/ #・RegCondExec (常駐してレジストリを監視) # http://www20.atwiki.jp/zero3_392/pages/10.html #・DenwaPlus (常駐して通話を監視、WS007SHのみ) # http://dislife.com/software/ #・ExecMulti (複数アプリの起動代行管理) # http://www.momo-lab.net/inu/execmulti.html #※他に、これと同一タイミングで起動するmscrを利用している場合、 #MortScript.exe本体が行う複数タスク管理中に実行されたmscrは、 #処理を無視される場合があります。 #これを回避するには、"MortScript"や"ExecMulti"等を利用して #各mscrの起動タイミングを、ほんの少しずらす様にして下さい。 #アンインストールの際は、"AutocRNApp"による #登録を行っていれば解除して、本mscrを削除するだけで大丈夫です。 #必要なければ、ログファイルやそのフォルダパスも削除して下さい。 #その他レジストリの追加、別ファイルの作成等は行っていません。 #本mscrによって生じる不利益に当方は関与しません。 #設定変数値を除く内容に改ざんがない限り、再配布は自由です。 #内容に変更を加えた際の再配布は、必ずその変更前と変更後の #明記を、本文中にて行ってあれば構いません。 #--------------------------------------------------------------- #以下環境設定 #(書き換えの際、文字コードS-JISが変換されないよう御注意下さい。) #■本mscrを、cmdRegistryNotifyAppで登録し実行する=1、しない=0。 #また登録用、解除用それぞれのパスも合わせて下さい。 #初回実行時のみ登録/解除を行います。後はそのまま使用して下さい。 #本mscrの名前やパスを変更した場合、再度実行すれば再登録します。 #注意!本mscrを削除する際は、事前に=0にして解除実行して下さい。 #予めファイル名に任意の文字を加えておけば、忘れないと思います。 #Trigger_ShPhone等別アプリに起動を行わせる場合は0で利用します。 AutocRNApp=0 cRNAppPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryNotifyApp.exe" cRStopPath="\Program Files\cmdRegistryNotifyApp\cmdRegistryStopNotification.exe" #■本mscrを常駐利用する=1、しない=0。 Always=0 #■通話中、画面消灯を何分毎に行うか、整数(分単位)で指定。 #=0にすれば、消灯しなくなります。 DispOffTime=1 #■通話開始から、何分後に一回目の警告を行うか、整数(分単位)で指定。 #主に誰とでも定額オプションの10分未満を指定するといいと思います。 #=0でこの機能をオフにします。 FstAlertTime=8 #■通話開始から、何分後に二回目の警告を行うか、整数(分単位)で指定。 #主にウィルコム定額プランの2時間45分未満を指定するといいと思います。 #=0でこの機能をオフにします。 SndAlertTime=160 #■通話開始から、何分後に通話を強制終話するか、整数(分単位)で指定。 #=0でこの機能をオフにします。 TermTime=163 #■警告に音を利用するなら=1、でなければ=0。 #(環境に依らず音が鳴る手段として1秒だけ保留状態をトグルします。) Sound=0 #■警告にバイブを利用するなら=1、でなければ=0。 Vibrate=1 #■通話記録をログに記録するならCallLog=1、でなければ=0 #(このログは発着履歴と違い、通話確立のあった履歴だけ残ります。) #=0であれば、ログに関わる全ての処理を行いません。 CallLog=0 #■ログファイルのパス。(存在しなければ自動的に作られます。) #ログ有効時は、本mscrを事前に通常起動すると準備だけ行います。 CallLogPath="\My Documents\CallLog.txt" #■ログファイル更新成功後、Today画面を更新する=1、しない=0。 ReToday=0 #■ログファイルの記録件数を、整数で指定。 CallList=20 #■ログの表記法を、必要であれば多少変更できます。(改行は不可) #フォーマット記述方法はMortScript準拠なので、参考にして下さい。 # http://home.att.ne.jp/wave/deox_pop/mortscript.html#9.11.2 SendForm="■Send " ComeForm="■Come " DateForm=" m/d({W}) H:i" PlusForm=" +H:i.s" #↓デフォルトの表示フォーマット参考例。(#は付けていません) #■Send - 070BANGOU00 登録していれば名前 # 01/23(月) 23:45 +00:25.12 #--------------------------------------------------------------- #バージョン履歴 #1.03 仕様変更、だれとでも定額オプション用にも考慮。 #1.01 常駐(Always=1)で画面消灯を繰り返すバグがあったのを修正。 #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 (""HKCU"",""Software\Sharp\PhoneApp"",""LockPhone"")" Loop=1 While ( (Loop=1) or (Eval (RegLockPhone)=262145) or (Always=1) ) Loop=0 #■準備 StartTime=TimeStamp() TermCount=0 CallFlag=0 AddTime=60 RestTime=60 #If (ConnectVib=1) # Vibrate (ConVibTime) #EndIf #■最初の画面オフ If ( (DispOffTime>=1) and (Eval (RegLockPhone)=262145) ) ToggleDisplay (False) DispOffCount=0 EndIf #■通話中ループ開始 While (Eval (RegLockPhone)=262145) CallFlag=1 #■1分(-補正時間)静止 #Sleep (RestTime) RestMod = (RestTime - 1) mod 5 RestCount = (RestTime - RestMod - 1) / 5 Sleep ((RestMod + 1) * 1000) While ( (Eval (RegLockPhone)=262145) and (RestCount>=1) ) Sleep (5000) RestCount=RestCount-1 EndWhile #■画面オフルーチン If ( (DispOffTime>=1) and (Eval (RegLockPhone)=262145) ) DispOffCount=DispOffCount+1 If (DispOffTime=DispOffCount) ToggleDisplay (False) DispOffCount=0 EndIf EndIf #■警告ルーチン TermCount+=1 If (Eval (RegLockPhone)=262145) If( (TermCount=FstAlertTime) or (TermCount=SndAlertTime) ) If (Sound=1) Repeat(2) SendLeftSoft("電話 ") If(Screen("portrait")) HoldPoint=Array(400,640) Else HoldPoint=Array(576,352) EndIf Sleep(500) MouseClick("電話 ",HoldPoint[1],HoldPoint[2]) Sleep(500) EndRepeat EndIf ToggleDisplay (True) DispOffCount=0 If (Vibrate=1) Vibrate (150) Sleep (200) #Vibrate (150) EndIf EndIf EndIf #■強制終話ルーチン If (Eval (RegLockPhone)=262145) If(TermCount=TermTime) PostMessage ("電話 ",1586,450,0) Sleep(1000) ToggleDisplay (True) DispOffCount=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 (CallLog=1) If (CallFlag=1) Call ("CallLogMdf") Else Call ("CallLogFileChk") EndIf EndIf #■常駐用待機 If (Always=1) Sleep (1000) If (Eval (RegLockPhone)<>262145) ErrorLevel ("syntax") WaitForActive ("電話 ",58) ErrorLevel ("error") EndIf Sleep (1000) EndIf EndWhile #--------------------------------------------------------------- #Sub Script #■Call ("CallLogMdf") ログ更新 Sub CallLogMdf EndTime=TimeStamp() SendPath="\Windows\Callinghistory.dat" ComePath="\Windows\Calledhistory.dat" While (Eval (RegLockPhone)<>0) Sleep (500) EndWhile Sleep (300) If (FileModifyTime (SendPath) > FileModifyTime (ComePath)) SendCome=SendForm OpenFile=SendPath NamePos=4 Else SendCome=ComeForm OpenFile=ComePath NamePos=5 EndIf Line=Part (ReadFile (OpenFile,"jis"),"^NL^",-2) Dial=Part (Line,"^TAB^",1) Name=Part (Line,"^TAB^",NamePos) Date=FormatTime (DateForm,StartTime) Plus=FormatTime (PlusForm,EndTime-StartTime) Record=SendCome&Dial&" "&Name&"^NL^"&Date&Plus Call ("CallLogFileChk") If (FileExists (CallLogPath)) PreLogText=ReadFile (CallLogPath) ListCount=CallList*2 LogLine=Record PostText="" i=1 While ( (LogLine ne "") and (i1) or Find (CallLogPath,"\\")\ or (ReverseFind (CallLogPath,"\")=Length(CallLogPath)) ) message ("以下のパス指定は無効です。^NL^設定を確認して下さい。^NL^CallLogPath="""&CallLogPath&"""") ElseIf (Question ("以下ファイルを作成します^NL^"&CallLogPath,"OkCancel")<>OK) Split (CallLogPath,"\",0,PathPart) i=2 PathAll="" While (i