はじめに
皆さまの湯婆婆のコードを見てみると、ついつい作ってしまいました。Javaで湯婆婆が最初でいいんですよね。
【毎日自動更新】湯婆婆 LGTMランキング!を見ると、いまや、あらゆる言語、あらゆる処理系で湯婆婆が走るという。
これは令和時代の hello,worldかもしれない。
Autohotkey とは
Autohotkeyとは、シンプルにキーフックのコードが書けるWindows用のスクリプト言語です。シンプルすぎるぶん、クラスライブラリを作りにくいとか、リソースの概念がないので画像を埋め込めないとか、GUIは殆ど手作業のコードで書いていく必要があるとか色々と問題はありますが、一応ギリギリ実用ツールも作れるレベルです。
詳しくは、Autohotkeyから処理系をダウンロードして遊んでください。
マニュアル本は売られてないので、Autohotkey Wikiへどうぞ。
標準出力の代わりにトースト通知
Autohotkeyに、標準入出力が標準であるか否か不明ですが、すくなくとも今まで使ったことがありません。また、外部ライブラリを組み込めば標準入出力がありそうですが、シンプルに作りたいのに、外部ライブラリを組み込むのは馬鹿らしい。そこで、Autohotkey が標準で持っているWindows10のトースト通知で湯婆婆のセリフを表示します。これが標準出力の代わりです。
なお、ジブリのフリー素材から湯婆婆アイコンを作って載せました。
アイコン作成には、マルチアイコン生成ウェブアプリを使用させていただきました。この場を借りて感謝いたします。
https://kantaro-cgi.com/webappli/multiicon-maker/
yubaba.exe を実行すると、最初、湯婆婆は契約書へのサインを要求します。
標準入力の代わりにダイアログ+テキストボックス
標準入力の代わりに、入力ダイアログ+テキストボックスとOKボタンを設けました。
契約書のテキストボックスに名前を入れて、OKボタンをクリックします。
ラテン文字の名前ならば、Autohotkeyの機能で強制的に入力置換とかもできた筈です。
例えば、Elizabethと入力すると Beth に置換するなどです。これにより、名前が強制的に置き換えられる筈でした。
しかし、日本語の2バイト文字では、IMEとカナ漢字変換が絡むので、Autohotkeyでは流石に操作できません。
よって、湯婆婆の最後のセリフの後、yubaba.exe は終了します。
トースト湯婆婆のソースコード解説
ソースコードを以下に示します。
TrayTip,湯婆婆,契約書だよ。そこに名前を書きな。
Sleep,1000
Gui, Default
Gui, New
Gui, Font,s10 c000000
Gui, Add, Edit,vvName X60 Y20 W260 H20 -Vscroll,
Gui, Add, Button,ggButtonOk X300 Y60 W80 H22,OK
Gui, Show, W420 H90, 契約書
return
gButtonOk:
Gui, Submit, NoHide
Gui, Destroy
TrayTip,湯婆婆,フン、%vName%というのかい。贅沢な名だねぇ。
Sleep,3000
len := StrLen(vName)
Random,sPos,1,%len%
NewName := SubStr(vName,sPos,1)
TrayTip,湯婆婆,今からお前の名前は%NewName%だ。いいかい、%NewName%だよ。分かったら返事をするんだ、%NewName%!!
Sleep,3000
exitapp
TrayTip文が、トーストを通知します。第1引数がトーストのタイトル、第2引数がトーストのメッセージです。
Sleep文は、第1引数だけ待ちます。単位はミリ秒です。
一連のGui文は、契約書ダイアログを表示したのち、Return して常駐します。
なお、OKボタンをクリックすると、gButtonOK: ラベルに飛びます。
gButtonOK:の最初の Gui,Submit,NoHideは、テキストボックスに入力された名前を変数vNameに設定するものです。
Gui,Destroy は、ダイアログを閉じるものです。
StrLen() は、文字列長を取得する関数です。
Random文は、第1引数の変数に、第2引数から第3引数までの整数をランダムに設定します。
SubStr() は、文字列の一部を取得する関数です。
exitappは、トースト湯婆婆を終了する文です。
なお、名前がないときには一応クラッシュしているようですが、何も言わずに落ちるので派手さはないです。
この湯婆婆、ずいぶんと寡黙です。
OSDNにソースコードと実行ファイル一式をアップロードしました。
https://osdn.net/projects/toast-yubaba/releases/