探検


AutoHotkey スレッド part28

■ このスレッドは過去ログ倉庫に格納されています
1名無しさん@お腹いっぱい。 (ワッチョイ aef9-dJm7)
垢版 |
2020/04/03(金) 18:35:06.00ID:/YRSlUCD0
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512

■配布元
http://ahkscript.org/download/

■前スレ
AutoHotkey スレッド part27
http://egg.5ch.net/test/read.cgi/software/1555770773/

■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
Autohotkey専用うpろだ
http://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
http://pastebin.com/

■派生版
IronAhk (.NET製、クロスプラットフォーム)
https://github.com/polyethene/IronAHK
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2020/04/04(土) 14:55:58.71ID:oDQUgnR500404
いちもつ
3名無しさん@お腹いっぱい。 (ワッチョイ cb76-8H9x)
垢版 |
2020/04/05(日) 12:03:16.10ID:GWmWDwN30
Include先も含め、AutoHotkey.ahkに関係するホットキー全体で
変数を共有するためには、その都度IniReadするしかないですか?
グローバル変数的な何かはないのかなと。

可能なら、AutoHotkey.ahkからのInclude先AHKファイルで定義した変数を共有したいのですが。

下のような構成で、bを押したときにaaAAaaと表示させたい

[AutoHotkey.ahk]
#Include a.ahk
#Include b.ahk
Return

[a.ahk]
AAA := "aaAAaa"
a1::Return
a2::Return

[b.ahk]
b::MsgBox, % AAA
2020/04/05(日) 12:48:56.56ID:KUQx6rxd0
脳内で書いてないで実際に動かしてみなよ
2020/04/05(日) 15:14:23.10ID:fo7yX2Dr0
その状態でAutoHotkey.ahkを動かす分にはいける
[AutoHotkey.ahk]
AAA := "aaAAaa"
a1::Return
a2::Return
b::MsgBox, % AAA
Return
includeは全てAutoHotkey.ahkとして展開されるので↑と同義になるから

ただしaとbのincludeを逆にしたらautoexrcuteが働かない
includeの位置は要注意
[AutoHotkey.ahk]
b::MsgBox, % AAA
AAA := "aaAAaa"
a1::Return
a2::Return
Return

あと当然だが a.ahk / b.ahk を単体起動した時はAutoHotkey.ahkから起動した時のようには動作しない
6名無しさん@お腹いっぱい。 (ワッチョイ cb76-8H9x)
垢版 |
2020/04/05(日) 16:49:19.64ID:GWmWDwN30
>>5
わかりました、ありがとうございます。
Includeは内容を展開しているだけだったのですね。
まずInclude元でAutoexecuteが開始し、Includeがあればその先のReturnまでAutoexecuteされ、
またInclude元に戻って、そのInclude元のReturnまではAutoexecuteされるものだと思っておりました。

自分のスクリプト郡は、Include先でReturnがあったためにそこでAutoexecuteが終わってしまっていた訳ですね。
7名無しさん@お腹いっぱい。 (ワッチョイ cb76-8H9x)
垢版 |
2020/04/05(日) 16:49:56.54ID:GWmWDwN30
ところで以下ような感じに、ファイルごとに役割を分け、
またそれぞれのファイル内でしか使わない変数はそのファイル内に収めておきたいのですが、
その方法はありますでしょうか?(下の構成ではInputA.ahkの2行目でAutoexecuteが終わってしまいますよね。)

あまり美しくないですが、AutoHotkey.ahkの先頭にVariables.ahkのようなものをIncludeして、そこで変数リストを作るとかしかないですかね?

[AutoHotkey.ahk]
#Include InputA.ahk
#Include InputB.ahk
8名無しさん@お腹いっぱい。 (ワッチョイ cb76-8H9x)
垢版 |
2020/04/05(日) 16:50:06.91ID:GWmWDwN30
[InputA.ahk]
textA := "A"
a::MsgBox, % textA
d::MsgBox, % (textA . "D")

[InputB.ahk]
textB := "B"
b::MsgBox, % textB
c::MsgBox, % (textB . "C")
2020/04/05(日) 17:54:59.11ID:fo7yX2Dr0
test
2020/04/05(日) 18:08:01.88ID:fo7yX2Dr0
イニシャライズを各AHK内で完結させたいならsubかfunctionにしてcall
ただし全体のグローバル変数であるという事実は変わらんが

エラった時のpastbin AHKのハイライトもあるのね
https://pastebin.com/dkUfkDTj

ただこれだと一時的に#includeをコメントアウトで外したいときにautoexecuteの
手直しも必要になるので islabel() isfunc() を入れたほうがいいかも
11名無しさん@お腹いっぱい。 (ワッチョイ cb76-8H9x)
垢版 |
2020/04/06(月) 01:59:36.99ID:QgAFECbT0
>>10
なるほど確かにこれなら実現できますね!
ありがとうございました、とても勉強になりました

ところで下のようにしてみたのですが、#Include では変数が使えないみたいですね。
何かいい案はないでしょうか?

というのも、実際は10以上のファイルがあるので、ダラダラ書くよりLoopで回したいものでして・・・

https://pastebin.com/g2Gc1cDU
2020/04/06(月) 03:45:46.30ID:pNj6d1Pb0
無理だが
いっそ関数ライブラリ化して全部 %A_ScriptDir%/Lib に押し込むという手もある
したらincludeそのものが不要になる
2020/04/06(月) 04:21:20.13ID:8dTlIF+30
>>11
Includeするahk内で更にInclude出来るはずだぞ(その内容は「#Include 〜.ahk」だけでも良い)
だからメインahk(AutoHotkey.ahk)内でのInclude用ahkの名前は固定しといて
メインahkでそのahkファイルを書き換えすれば手直しは要らなくなると思う

例として、メインahkにIncludeするファイル名を「Include_ahk.ahk」とし

Include_ahk.ahk内は
-----------------------------------
#Include InputA.ahk
#Include InputB.ahk
-----------------------------------

↑の2行はメインahkのautoexecute内で検索→名前取得→書き込み処理を実行して
この処理の後に「#Include Include_ahk.ahk」を記述する

拙い説明 & 出来なかったらスマヌ
もしアレだったらMGLのスクリプトが参考になると思う
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況