カクカクの北海道Uターン週記

「元」日本語教師 /「元」旧司法試験受験生によるカクカクの北海道Uターン週記

SCount.mscr

 単身生活時は、土日は“休息”の時間だった。“何もしないことをする”ことにしていた(積極的不作為とでもいうべきか)。
 妻(とクルマ)が来てからは、どこかに出掛けて何かしらする週末が増えたわけだが、今日は彼女が仕事で外は雨。久々に独り家にこもって、月曜日に来たSONY BRAVIAのマニュアルを読んだりしようと思っているが、その前にAdes用のスクリプトを一つ書いてみたので謹んで紹介しますね。
 
 節煙対策?のスクリプトなのだが、要は「当日何本吸ったか」と「直近いつ吸ったか」をToday画面に表示しようという仕掛けである。(因みに私は、日に4〜7本(3本で済む日はほぼなく、8本吸う日もない)のライトスモーカー)。だれ定対策の通話カウントスクリプトこちら参照)の応用ですね。
 とりあえずは完成イメージをどうぞ(「T1*8:40」→「T2*10:06」)。
 
 
 まず、\My DocumentsにSmokeLogフォルダを作成し、そこに.iniファイル(Smoke.ini)を置く(SS左)。Smoke.iniは、SS右のようにしておく。
  
 
 スクリプトは、直近のカウント日と今日の日付と照らし合わせて、日が変わっていれば回数リセット、いなければカウントを+1(この際、XiShowIcon.exeを使ってカウントアップのアイコンを表示する)して、レジストリに登録する(cmdRegistryNotifyApp.exeで監視することによりTodayの表示をリアルタイムにするため)。

#一日のタバコ本数をカウントするスクリプト
#.iniファイルに書き込む(さらにレジストリに登録)
#Todayに表示する元データとする

#直近のカウント日を読み出す
DayLog = IniRead( "\My Documents\SmokeLog\Smoke.ini" , "Tobacco" , "Day" )

#今日を取得
Today = FormatTime( "d" , TimeStamp() )

#日が変わっていたら、回数をリセット
If ( Today = DayLog )
	#アイコン表示してカウントアップ
	#ログを書き換えたらアイコンを消す
	SendSpecial( 19 , "down" )
	Run( "\Program Files\XiShowIcon002\XiShowIcon.exe" , "-k 0x13" )
	CountLog = IniRead( "\My Documents\SmokeLog\Smoke.ini" , "Tobacco" , "Count" )
	Sleep( 800 )
	IniWrite( "\My Documents\SmokeLog\Smoke.ini" , "Tobacco" , "Count" , CountLog + 1 )
	SendSpecial( 19 , "up" )

Else
	IniWrite( "\My Documents\SmokeLog\Smoke.ini" , "Tobacco" , "Count" , 1  )

EndIf

#今日をSmoke.iniに書く
IniWrite( "\My Documents\SmokeLog\Smoke.ini" , "Tobacco" , "Day" , Today )

#レジストリに登録
RegWriteDWord( "HKCU" , "\Software\*****" , "SLog" , CountLog )

Exit

 
 Todayに表示するために、DispInfo.mscrを改造(DispInfoについてはこちらのエントリー参照)。「当日何本?」はSmoke.iniから取得し「直近はいつ?」は.iniファイルの更新日時を読み取ることにした。

#Today画面にAlarmのセット状態/タバコ本数/直近のタバコ点火時刻/実行中のプログラム数を表示するスクリプト

#CfmAlarmが走っていれば終了
#走っていなければすぐに実行
If( ScriptProcExists( "CfmAlarm.mscr" ) = 1 )
	Exit
Else
	Call( "DI" )
EndIf

#サブルーチン
Sub DI

	#Alarmがセットしてあるかを判断
	A = RegRead( "HKCU" , "\Software\GreenSoftware\AlarmClock\Setting" , "Alarm" )

	#タバコ本数を読み取り、「  T:(数)」と表示
	T = IniRead( "\My Documents\SmokeLog\Smoke.ini" , "Tobacco" , "Count" )
	T = "T "&T&""

	#直近のタバコ(時分)を取得し、表示
	THM1 = FileModifyTime( "\My Documents\SmokeLog\Smoke.ini" )
	THM2 = FormatTime( "Hi" , THM1 )
	TH = Substr( THM2 , 1 , 2 )
	TM = Substr( THM2 , 3 , 2 )
	THM = "*"&TH&":"&TM&""

	#実行中のプログラム数
	P = RegRead( "HKCU" , "\Software\Sharp\PhoneStatus" , "Status27" )

	#Alarmがセットしてある場合
	#時刻(「HH:MM」部分=後ろから5文字)をレジストリから読み取る
	#その場合、お尻に「 ! 」をつける
	#セットしていなければ「 ...Off 」とする
	If( A = 1 )
		HM = RegRead( "HKCU" , "\Software\GreenSoftware\AlarmClock\Setting" , "strNext" )
		X = SubStr( HM , -5 ) & " !      "
	Else
		X = " ...Off       "
	EndIf

	#QuickMemoForPokePのレジストリに適宜空白を入れて書き込む
	#WSIMが入っているかを判断
	SIM = RegRead( "HKCU" , "Software\Sharp\ShPhoneLib" , "MyPhonenum")

	#WSIMが入っていないとき
	If( SIM eq "")
		RegWriteString( "HKLM" , "Software\Microsoft\Today\Items\quick_memo_for_pokeP" , "ptext1" , "@"&X&" - NO WSIM -    ≫P:"&P )

	#WSIMが入っているとき
	Else
		RegWriteString( "HKLM" , "Software\Microsoft\Today\Items\quick_memo_for_pokeP" , "ptext1" , "@"&X&T&THM&"     ≫P:"&P )

	EndIf

	#MiniEditがあればここで終了
	If( WndExists( "MiniEdit v0.19" ) = 1 )
		Exit

	#MiniEditがない場合
	#Todayなら、画面更新のためuNClockを起動/終了
		#マナーモードでなければ確認のクリック音
	Else
		If( WndActive( "Desktop" ) eq TRUE )
			Run( "\Program Files\uNClock\uNClock.exe" )
			WaitForActive( "unclock" , 1 )
			SendRight
			If( Regread( "HKCU" , "Software\Sharp\PhoneStatus" , "Status3" ) = 0 )
				PlaySound( "\Program Files\MortScript\Utility\Click.wav" )
			EndIf
		EndIf

	EndIf

EndSub

 別途、レジストリエディタを使って、適当なところ(笑)にレジストリキーを作成(私の場合は\HKCU\Softwareの下に作ってみた)。その数値変化をcmdRegistryNotifyApp.exeで監視させればよい。で、SortInchKey.exeなどを使ってスクリプトを適当なキーに割り当てて完成(私の場合はHookKeyHook.exeで終話キー3度押し。タバコに火を点けるときに終話キーをトリプルクリックすれば、何本目が分かる。無論、画面を見た際に、まだ前回から〜時間しか経っていないなと思えば点火を思いとどまるかもしれない)。
 
 当日何本?は特に節煙対策となるので、減らしたいなとお思いの方はお試し下さい。
 そのうち更新予定の別ページもどうぞ。