よたよたの京都移住週記

日本語教師 /「元」旧司法試験受験生によるよたよたの京都移住記

TuwaCount

 前回、前々回と紹介したスクリプトがめでたく完成したのでアップ。

 <発信→終話>の後、スクリプトが走る(起動はアイコン表示により可視化)。現在の発信回数は別に用意されたメッセージウィンドウで表示する。
 *注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で)。
 もしも参考にされる方がいたら自己責任でお願いしますね。
 *そのうち更新予定の別ページもどうぞ