前回、前々回と紹介したスクリプトがめでたく完成したのでアップ。
<発信→終話>の後、スクリプトが走る(起動はアイコン表示により可視化)。現在の発信回数は別に用意されたメッセージウィンドウで表示する。 *注1:<受信→終話>では動かないが、「発信」さえしてしまえば「通話」に至らなくても(=相手が電話に出なかった場合でも)カウントされる *注2:カウントは“070”以外への全ての<発信→終話>なので“0120”等の無料通話もカウントされる
コンセプトは、
1)月間の発信回数をカウントする
2)月が変わったら発信回数をリセットする
3)“070”への発信はカウントしない
の3点(“1通話10分”については、GChargeAlarmで)。
このうち、1)と2)はネット上のスクリプトを参考にさせていただいた(ほぼ丸パクリ…先人の知恵に心から感謝)結果、比較的簡単に実現できた。が、3)については悩んだ。「発信」の際の画面を文字化する(ScreenToChars)方法でできるかなとも思った(実際そのように処理しているスクリプトもある)が、私の環境ではどうにもうまくいかない。
そこで、発信履歴を記録しているレジストリかファイルがないか調べたら、\Windows直下にあるCallingHistory.datがそれのよう。そこから発信先を区別することに(IniRead)。
また、最後まで悩んだのが、スクリプトを動かすタイミング。当初、cmdRegistryNotifyAPPで「発信」を監視すればいいだろうと簡単に考えていたのだが、CallingHistory.datは終話直後の更新のよう。残念ながらこれではうまくいかない(一つ前の発信番号を読むことになる)。
それならばと「終話」を監視してやってみたのだが、これもなぜだかダメ。さんざん悩んで、手動起動で試用していたりもした(前回のエントリー参照)。
しかし、ふと、アドエスの場合は「終話」後、必ずToday画面に戻ることに気付いた。その結果、「発信」(レジストリ)と「Today画面」(ウィンドウ)の両者を監視することにして解決(「発信」でスクリプト甲(トリガー)を起動し、甲に「Todayになったらスクリプト乙を起動(WaitForActive)」と記述)。
前回載せたGIFアニメの改訂版を再び載せときます(Today→電話アプリ起動→発信→終話→スクリプトON→OFF)。
では、続きを読むから、導入方法などを。
*必要なもの
甲)MortScript.exe(私の場合、Ver.4.3beta15を使用)
乙)cmdRegistyNotifyAPP.exe
(別にcmdRegistryNotifyHelper.mscrがあると便利)
※アイコンを表示させる場合は、これに加えて
丙)XiShowIcon.exe
(別にアイコン用.pngファイル=0x13.pngを用意し、\Program Files\XiShowIcon002\imageに置いておく)
丁)SortInchKey.exe
(メニュー→設定で、キーコード:0x13を「COUNT」(コード名称)としておく。写真下参照)
A)TCStarter.mscr(後掲)
B)TuwaCount.mscr(同)
*準備
1)アプリ甲)乙)を導入(アイコン表示には併せて丙)丁)も)
2)スクリプトA)B)は、ともに\Program Files\MortScript\Utilityに置く
3)\My Documents\TuwaLogにDenwa.iniを作成(セクション:[Denwa]、エントリ:Count=0とMonth=0。写真下参照)
さて、まずはcmdRegistyNotifyAPP(場合によってはcmdRegistryNotifyHelperを使って)で、TCStarter.mscrを「発信時」に登録する。引数は以下。
3;TCStarter;HKCU;Software\Sharp\PhoneAPP;LockPhone;\Program Files\MortScript\MortScript.exe;'"\Program Files\MortScript\Utility\TCStarter.mscr"';-;-;-1;1;1;-;131073
トリガースクリプトA)TCStarter.mscrの中身は以下。
#TuwaCount.mscrを終話後に動かすためのスクリプト #自身はcmdRegistoryNotifyAPPにより発信をトリガーとして起動 #ウィンドウがTodayに変わったらTuwaCount.mscrを呼ぶ WaitForActive( "Desktop" , 610 ) CallScript( "TuwaCount.mscr" ) Exit
WaitForActiveの行で610秒を上限としているのは、「“070”以外への通話=10分(600秒)以内」が想定されるからである。
本スクリプトB)TuwaCount.mscrは以下。
#070以外への発信回数をカウントするスクリプト #月500回を超えると有料になる「だれとでも定額」対策 #☆スクリプト開始の合図としてアイコンを表示させる SendSpecial( 19 , "down" ) Run( "\Program Files\XiShowIcon002\XiShowIcon.exe" , "-k 0x13" ) #前回通話した月を読み出す MonthLog = IniRead( "\My Documents\TuwaLog\Denwa.ini" , "Denwa" , "Month" ) #今月を取得 ThisMonth = FormatTime( "m" , TimeStamp() ) #月が変わっていたら、発信回数をリセット If ( ThisMonth = MonthLog ) Else IniWrite( "\My Documents\TuwaLog\Denwa.ini" , "Denwa" , "Count" , 0 ) EndIf #.datファイルの更新のマージンを念のため500ミリ秒とる #COUNTアイコンを確認しやすくする意味も Sleep( 500 ) #直近の発信番号を取得 Num = "\Windows\Callinghistory.dat" line = ReadLine( Num ) While( NOT IsEmpty( line ) ) CallTo = line line = ReadLine( Num ) EndWhile CallTo = SubStr( CallTo , 1 , 3 ) #発信が070宛でなければログを書換え #発信が070宛なら何もしない If( CallTo <> 070 ) CountLog = IniRead( "\My Documents\TuwaLog\Denwa.ini" , "Denwa" , "Count" ) IniWrite( "\My Documents\TuwaLog\Denwa.ini" , "Denwa" , "Count" , CountLog + 1 ) Else EndIf #現在の月をDenwa.iniに書く IniWrite( "\My Documents\TuwaLog\Denwa.ini" , "Denwa" , "Month" , ThisMonth ) Sleep( 200 ) #☆スクリプト終了の合図としてアイコンを消す SendSpecial( 19 , "up" ) Exit
アイコン表示関係のブロック(コメントアウトの行に☆)に注意されたい。
これでうまくいくはずである。後は、メッセージウィンドウを別に用意するなどし、回数を確認すればよい(MessageとIniReadで)。
もしも参考にされる方がいたら自己責任でお願いしますね。
*そのうち更新予定の別ページもどうぞ