#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モードを使う
- のが混乱が少ないのではと思う

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS