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

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

Todayに各種情報を

 先日、旅行の総集編をエントリーしたが、その後妻が「フルムーンパスを使わなかったらいくらかかったか」を計算してくれた。彼女によれば、JRの交通費は一人分128,980円、二人合わせて257,960円だということである。フルムーンパスは99,900円(もちろん二人分)だから、相当安く上がったことが分かる。
 
 さて、ずいぶん前に“「AlarmClock」の状態をToday画面に”で書いた(“”、及び“続・続”も参照)小技。その後、何度か改定を経、ここにきてほぼ完成の域に達したと思われるので満を持して?ご紹介させていただく(以下、興味のある方は「続きを読む」からどうぞ)。

 
 そもそもこの小技は、「AlarmClock」でセットしたアラーム時刻を(アプリを起動することなく)Today上で確認したい、という欲求から捻り出したものであった。が、「レジストリの値をTodayに表示する」ことが可能となったことで、じゃあこれも、と次の欲求が生まれたのである(這えば立て、立てば歩めの親心?)。
 
 では何を? 表示項目として思いつくのは、例の「TodayCompact」でも表示される4つである。すなわち、甲)アラーム時刻の他に、
 乙)不在着信数
 丙)未読メール数
 丁)同ライトメール
 戊)実行中のプログラム数 である。
 アラーム時刻及びこの4つをTodayに表示することが目標となった。
 
 これは、それぞれのレジストリを調べ、その値を「QuickMemoForPokeP」に書き込んでやればいいだけなので、比較的簡単な作業であった。……改良点その1
 それぞれ、以下のレジストリを参照する。

 乙)HKCU以下、\Software\Sharp\PhoneStatusの"Status8"
 丙)同"Status14"
 丁)同"Status4"
 戊)同"Status27"
 *甲)については“続・続”を参照されたい
 で、実現した形が右の写真(アラームが8:30に設定されており、乙)〜戊)の全てが「0」の状態)。
 
 とりあえずはこの形でしばらく運用していた。しかし、考えてみれば、写真下左のように、値が0のとき、すなわち、不在着信/未読メール/同ライトメールがないときにわざわざ「0」を表示する必要はない。そこで、それらの値が「0」のときは表示なし(実際は空白を表示)とし、「0」でない数字のときだけ(アラーム時刻の横に左詰めで)表示するように改善を図った(実行中のプログラムについては、(値が「0」であっても)常に(右詰めで)表示することとした)=同右=。……改良点その2
  
 
  不在着信1件ある場合
  未読メールが1件ある場合 
  両者がそれぞれ1件ずつある場合
 
 また、W-SIMが入っていないと上手く表示されない=写真下左=ので、その場合には「W-SIMが入っていない」旨の表示をさせることとした=同右=。……改良点その3
  
 

 これにより、大層気分よく情報が一覧できるようになり、理想が叶ったわいと一人悦に入っていた。しかし、実は致命的な?欠点が残っていたのである。
 
 この小技は「cmdRegistryNotifyApp」に登録して運用(レジストリの値が変化したら「QuickMemoForPokeP」に書き込む)している(“”参照)のだが、「QuickMemoForPokeP」はリアルタイムに更新されるわけでない?ため、レジストリの値に変更があっても、Today上の表示が即変わるというわけではないのである。
 スクリプト("RedrawToday")を使ってTodayをその都度更新させることは簡単なのだが、それだと結構時間がかかりうざったい。そこで、手動で「uNClock」を起動(Today画面でOkキーを押せば起動するようにセットしておいた)して、結果として“その部分”が更新されるようにして運用していた(表示部分がToday下部なので、これで可能なのである)。右のGIFアニメ、「P:0」→時刻表示をはさんで→「P:1」になっているのがお分かりいただけるであろうか(「P:0」になっている画面からスタート)。
 

 まあこれで不足はないのだが、どうにかできるものなら、したい。試行錯誤を経て、やっと上手くいったのが以下の方法である。すなわち“自動的に「uNClock」を起動し、内部的にタイトルが「uNClock」になったらすぐ閉じる”のである。こうすると、見た目には「uNClock」は現れず、当該箇所の更新のみが行われる(理想の形であるが、何故かこの方法は、私の旧[es]では上手くいかない)。合わせて、更新が行われたら、その合図としてクリック音を出すように設定した(右のGIFアニメ参照。「P:2」→「P:0」と変化しているのだが、その瞬間にパチッと鳴るように設定。「P:2」になっている画面からスタート)。……改良点その4
 
 その他、細かい修正(「AlarmClock」関係では、別なスクリプトを動かすことがあり、その場合は例外処理したり)をいくつか経、完璧に理想の形となった。……改良点その5
 
 というわけで、以上5つの改良点を盛り込んだ血と涙と汗の結晶スクリプトの全文を置いておく(レジストリも絡むので、参考になさるという場合は自己責任でお願いします。また、私の環境に特化したスクリプトなので、このままの形では他の端末ではうまく動きません(音声ファイル等がなければエラーが出る等))。

#Today画面にAlarmのセット状態/不在着信数/未読メール数/同ライトメール数/実行中のプログラム数を表示するスクリプト
#Alarmのセット状態(左端)及び実行中のプログラム数(右端)は常時表示
#不在着信数/未読メール数/同ライトメール数は、件数が1以上のときだけ表示

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

#サブルーチン
Sub DI

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

	#不在着信数をレジストリから読み取り、値が0ならナシとし、0でなければ「  C:(数)」とする
	C = RegRead( "HKCU" , "\Software\Sharp\PhoneStatus" , "Status8" )
	If( C = 0 )
		C = ""
	Else
		C = "  C:"&C&""
	EndIf

	#未読メール数について同様に
	M = RegRead( "HKCU" , "\Software\Sharp\PhoneStatus" , "Status14" )
	If( M = 0 )
		M = ""
	Else
		M = "  M:"&M&""
	EndIf

	#未読ライトメール数について同様に
	L = RegRead( "HKCU" , "\Software\Sharp\PhoneStatus" , "Status4" )
	If( L = 0 )
		L = ""
	Else
		L = "  L:"&L&""
	EndIf

	#実行中のプログラム数は値そのまま=0件でも表示
	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

	#不在着信数/未読メール数/同ライトメール数の字数をカウント
	length = Length( C&M&L )

	#これに応じて空白(Qとする)の数を決定
	#不在着信/未読メール/同ライトメールがいずれも0件=字数0の場合、半角23コの空白を入れる
	If( length = 0 )
		Q = "                       "

	#不在着信/未読メール/同ライトメールのうちどれか1件だけが0でなかった場合
	#字数は5文字
	#=すなわち「空白|空白|C(又はM又はL)|:|数字」
	#数字が二桁以上の場合は考えない(笑)
	#その場合、半角15コの空白を
	ElseIf( length = 5 )
		Q = "               "

	#同じくどれか2件だけが0でなかった場合
	#=字数は10文字で、半角8コの空白を
	ElseIf( length = 10 )
		Q = "        "

	#同じく3件とも0でなかった場合等
	#文字数が0/5/10/15字以外の場合は、半角1コの空白を
	Else
		Q = " "

	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&C&M&L&Q&"≫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

 その他、アドエス関係については別ページもご覧下さい。