#author("2021-02-25T05:06:01+09:00","default:ryuichi","ryuichi")
#author("2021-02-25T05:06:31+09:00","default:ryuichi","ryuichi")
* MsgBoxでの変数展開 [#ga1f1f85]
** 変数展開 [#kadc028e]
*** レガシーモード - %変数名% [#e775e1e4]
#pr(autohotkey){{
Name := "Taro"
MsgBox, My Name is %Name% ; => My Name is Taro
}}
- '''%変数名%'''で変数展開される
*** Expressionモード - % 変数名 [#qf0074d6]
#pr(autohotkey){{
Name := "Taro"
MsgBox, % Name ; (1) => Taro
MsgBox, % "My Name is " . Name ; (2) => My Name is Taro
MsgBox, % "My Name is " Name ; (3) => My Name is Taro
}}
- 先頭に'''%'''とスペースを空けるとExpressionモードになり、変数が自動的に展開される
- 文字列を連結するには、(2)のように'''.'''ドットでつなげるか、(3)のように''' '''スペースでつなげる
- 参考:https://www.autohotkey.com/docs/Variables.htm#Intro
** エスケープ文字 - `バックスラッシュ [#ycdc0e4f]
#pr(autohotkey){{
Name := "Taro"
MsgBox, `%Name`% ; (1) => %Name%
MsgBox, 0, 1, Hi`, %Name%, 1.0 ; (2) => Hi, Taro
}}
- '''`'''バックスラッシュで、(1)'''%'''パーセント、(2)''','''カンマなどの特殊な文字をエスケープする
- なお、(2)はMsgBoxを引数4つつけて呼び出している
-- https://www.autohotkey.com/docs/commands/MsgBox.htm
- 参考:https://www.autohotkey.com/docs/misc/EscapeChar.htm
** 変数の再代入 [#led7f442]
#pr(autohotkey){{
Name0 := "Taro"
Name1 := Name0
MsgBox, %Name1% ; (1) Taro
Name2 = %Name0%
MsgBox, %Name2% ; (2) Taro
Name3 = Name0
MsgBox, %Name3% ; (3) Name0
Name4 := %Name0%
MsgBox, %Name4% ; (4)
Name5 := % Name0
MsgBox, %Name5% ; (5) Taro
}}
- (1) Expressionモードは''':='''で代入する
- (2) レガシーモードは'''='''で代入する
- 代入オペレータを間違うと(3)、(4)のように意図しない結果になるので注意する
- (5) Expressionモードの'''% '''で代入するしてもいい
- 参考:https://www.autohotkey.com/docs/Variables.htm#Intro
** 結論として [#h2c869c7]
FirstName := "Taro"
LastName := "Yamada"
FullName := FirstName . " " . LastName
MsgBox, % "My Name is " . FullName
MsgBox, % "My Name is " . FullName ; My Name is Taro Yamada
- 常に''':='''で代入して、代入時には%変数名%で展開しない
- MsgBoxを呼ぶときは'''% '''でExpressionモードを使う
- のが混乱が少ないのではと思う