LoginSignup
4
2

More than 3 years have passed since last update.

Autohotkeyでトースト湯婆婆

Last updated at Posted at 2020-11-12

はじめに

 皆さまの湯婆婆のコードを見てみると、ついつい作ってしまいました。Javaで湯婆婆が最初でいいんですよね。
【毎日自動更新】湯婆婆 LGTMランキング!を見ると、いまや、あらゆる言語、あらゆる処理系で湯婆婆が走るという。
これは令和時代の hello,worldかもしれない。

Autohotkey とは

 Autohotkeyとは、シンプルにキーフックのコードが書けるWindows用のスクリプト言語です。シンプルすぎるぶん、クラスライブラリを作りにくいとか、リソースの概念がないので画像を埋め込めないとか、GUIは殆ど手作業のコードで書いていく必要があるとか色々と問題はありますが、一応ギリギリ実用ツールも作れるレベルです。
 詳しくは、Autohotkeyから処理系をダウンロードして遊んでください。
 マニュアル本は売られてないので、Autohotkey Wikiへどうぞ。

標準出力の代わりにトースト通知

 Autohotkeyに、標準入出力が標準であるか否か不明ですが、すくなくとも今まで使ったことがありません。また、外部ライブラリを組み込めば標準入出力がありそうですが、シンプルに作りたいのに、外部ライブラリを組み込むのは馬鹿らしい。そこで、Autohotkey が標準で持っているWindows10のトースト通知で湯婆婆のセリフを表示します。これが標準出力の代わりです。
なお、ジブリのフリー素材から湯婆婆アイコンを作って載せました。

thumb-chihiro016_256.png

アイコン作成には、マルチアイコン生成ウェブアプリを使用させていただきました。この場を借りて感謝いたします。
https://kantaro-cgi.com/webappli/multiicon-maker/

yubaba.exe を実行すると、最初、湯婆婆は契約書へのサインを要求します。
湯婆婆1A.png

標準入力の代わりにダイアログ+テキストボックス

標準入力の代わりに、入力ダイアログ+テキストボックスとOKボタンを設けました。

契約書3.png

契約書のテキストボックスに名前を入れて、OKボタンをクリックします。

すると、トースト湯婆婆のダメ出しを喰らいます。
湯婆婆2a.png

3秒後に、トースト湯婆婆が新しい名前を付けます。
湯婆婆3a.png

ラテン文字の名前ならば、Autohotkeyの機能で強制的に入力置換とかもできた筈です。
例えば、Elizabethと入力すると Beth に置換するなどです。これにより、名前が強制的に置き換えられる筈でした。
しかし、日本語の2バイト文字では、IMEとカナ漢字変換が絡むので、Autohotkeyでは流石に操作できません。
よって、湯婆婆の最後のセリフの後、yubaba.exe は終了します。

トースト湯婆婆のソースコード解説

ソースコードを以下に示します。

yubaba.ahk
    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/

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2