X



AutoHotkey スレッド part30 IDのみ
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
垢版 |
2022/02/08(火) 18:38:19.33ID:UTRGyCNl0
元々がIDのみの表示で番号の始まっているスレを途中から別の表示で乗っ取るのは「背乗り」行為に当たるので、IDのみの表示で進行とします

■配布元
https://autohotkey.com/download/

■前スレ
AutoHotkey スレッド part29
https://egg.5ch.net/test/read.cgi/software/1620768466/

■日本語解説等
AutoHotkey Wiki
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://hdd.s300.xrea.com/ahk/
AutoHotkeyJp(過去ログdatあり)
https://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
https://www6.atwiki.jp/eamat/

■スクリプト投稿
Autohotkey専用うpろだ
https://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
https://pastebin.com/

■その他のテンプレ(5chのURL規制が厳しいのでpastebinに退避しました)
https://pastebin.com/raw/bWipuNmt
0953名無しさん@お腹いっぱい。
垢版 |
2024/01/21(日) 19:46:10.39ID:7DJqWtUs0
そんな感じで、正方形のディスプレイが理想なんだよな
縦に短いと折角フットプリントを都合しても、全然活かせない

ディスプレイの中の各ウインドウも正方形が理想
うちのブラウザとかエディタとかファイラーとかexcelとかはみんな正方形
0956名無しさん@お腹いっぱい。
垢版 |
2024/01/21(日) 20:49:33.68ID:7DJqWtUs0
VDT作業的には、見上げる姿勢は良くないんだよな
まっすぐ前を見てディスプレイの上端が見える配置がいい
縦の長さは下へ延ばす
つってもキーボードより下は不自然なので、高さ60cmくらいに限界がある
縦横60cmの33.4インチディスプレイ
0957名無しさん@お腹いっぱい。
垢版 |
2024/01/21(日) 23:50:41.88ID:NKXVHeIo0
AHK v2です。
#HotIf WinActive()の動作が想像と違ったので助けて欲しいです。

Deleteキー押下時、以下のようにしたいです。
・GroupAに属するアプリ操作時は、MyFunc()を実行。
・GroupBに属するアプリ操作時は、Enterキーを送信。

(1)の例では、GroupA操作時もGroupB操作時も、MyFunc()が実行されてしまいました。
【(1)】
#HotIf WinActive("ahk_group" GroupA)
{
Delete::MyFunc()
}
#HotIf

#HotIf WinActive("ahk_group" GroupB)
{
Delete::Send("{Enter}")
}
#HotIf
0958名無しさん@お腹いっぱい。
垢版 |
2024/01/21(日) 23:50:52.97ID:NKXVHeIo0
(2)の例では、GroupA操作時もGroupB操作時も、Delete::Send("{Enter}")が実行されてしまいました。
【(2)】
#HotIf WinActive("ahk_group" GroupB)
{
Delete::Send("{Enter}")
}
#HotIf

#HotIf WinActive("ahk_group" GroupA)
{
Delete::MyFunc()
}
#HotIf


(3)の例では、GroupA操作時もGroupB操作時も、MyFunc()が実行されてしまいました。
【(3)】
Delete::
{
if WinActive("ahk_group" GroupA)
{
MyFunc()
}
else if WinActive("ahk_group" GroupB)
{
Send("{Enter}")
}
}
0960名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 00:28:48.39ID:tIDZAczD0
v2使ってないから検証できないけど、v2のリファレンスで「#HotIf」の項目見てみたら
#HotIf WinActive("ahk_group MyGroup")
↑こうなってるから後ろの「"」の場所違うような・・・
0961名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 00:34:13.21ID:tIDZAczD0
>>960
あ、すまん
GroupAが変数ならv1だと↓すればいいんだけどもv2も同じならこれでいけるはず(ahk_groupの後ろの半角空白入れるのを忘れずに)
#HotIf WinActive("ahk_group " . MyGroup)
0962名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 00:36:25.55ID:bKQFDm5J0
それは変数の連結。
MyGroupっていう文字列を指定したいなら "" 内で良いけど別途MyGroup変数に文字列を入れてると思われる。

自分もahk_group使ったこと無いのでよくわからんが、
#HotIfは中括弧のスコープ無効だよね。ホットキーとして正しく認識してないんじゃないか?
あとはMyFunc()の定義をどこにどういうふうに書いてるのかね?
0963名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 01:06:39.70ID:3aIX8ca00
皆さん、ありがとうございます。

>>960
>>961さんのご指摘通り、"ahk_group"の部分が文字列、 GroupAやGroupBが変数で中身にアプリ名を表す文字列を入れています。

>>961
ドット連結の書き方も試してみましたが、結果は同じでした。WinActive部分がWinExistのような挙動をしていて、必ず一番上の条件で真になってその中身が実行されるような挙動です。

>>962
#HotIf WinActive("ahk_group" GroupX)の後の{}を外してみましたが、結果は同じでした。同じくWinActive部分がWinExistのような挙動をします。エディタの自動インデント対策のためデバッグ途中で付けてしまいましたが、確かに本来の書き方では{}は不要かもしれません。
MyFuncは、上の方でClassを定義していて、そこの関数を呼び出しています。複雑な処理のためここには書ききれませんが、GroupAもGroupBもMyFunc()の呼び出し自体には問題なく成功します。
0964名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 01:12:50.05ID:3aIX8ca00
ごめんなさい。
WinActive部分が本当にWinExistのような挙動をしているのか確実には分からないのですが、必ず一番上の条件で真になってその中身しか実行されないようです。
0967名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 01:26:22.88ID:tIDZAczD0
今さらだが>>961分かりにくかったので訂正

間違い → #HotIf WinActive("ahk_group " . MyGroup)

こういうこと言いたかった↓
GroupAに"MyGroup"と言う文字列が入ってるとする
#HotIf WinActive("ahk_group " . GroupA)
0968名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 01:39:34.88ID:tIDZAczD0
>>963
しつこくてスマンが
>#HotIf WinActive("ahk_group" GroupX)
↓これでもダメ?
何回も言うようだけど、ahk_groupの後ろ( " の直前)の半角空白入れるのを忘れずに
#HotIf WinActive("ahk_group " . GroupX)

もう寝ます
0970名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 02:11:54.55ID:3aIX8ca00
>>965
ありがとうございます。
どうやらこれが原因でした。

(誤)
GroupA := "_"
GroupAdd(GroupA, "app1.exe")
GroupB := "_"
GroupAdd(GroupB, "app2.exe")

(改)
GroupA := "GroupA"
GroupAdd(GroupA, "app1.exe")
GroupB := "GroupB"
GroupAdd(GroupB, "app2.exe")

くだらない理由になってしまい申し訳ないのですが、変数が未初期化の状態だと表示されるエディタの警告が煩わしかったため、どちらのGroupも適当に"_"で初期化して中身が同じになってしまったことが原因のようでした。
0971名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 02:34:34.58ID:3aIX8ca00
もう一つ期待した結果が得られないパターンが出てきました。
#HotIf WinActive()の記述順序によって結果が変わってしまいます。

【(4)】
GroupA := "GroupA"
GroupAdd(GroupA, "app1.exe")

#HotIf WinActive("ahk_group" . GroupA)
Delete::Send("a")
#HotIf

#HotIf WinActive("ahk_exe app2.exe")
Delete::Send("b")
#HotIf

上記の記述順序では下記の結果が得られますが、期待した結果ではありませんでした。
"ahk_exe app2.exe"はどのGroupにも属していません。
・GroupA
Delete -> Send("a")

・"ahk_exe app2.exe"
Delete -> Send("a")(※Send("b")を実行して欲しい!)
0972名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 02:34:47.17ID:3aIX8ca00
【(5)】
GroupA := "GroupA"
GroupAdd(GroupA, "app1.exe")

#HotIf WinActive("ahk_exe app2.exe")
Delete::Send("b")
#HotIf

#HotIf WinActive("ahk_group" . GroupA)
Delete::Send("a")
#HotIf

上記の記述順序では下記の結果が得られ、期待した結果を得られました。
・GroupA
Delete -> Send("a")

・"ahk_exe app2.exe"
Delete -> Send("b")
0974名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 08:49:08.17ID:85FxdUTx0
>>973
回答ありがとうございます。

GroupAdd(GroupA, "app1.exe")
としましたが、私の実際のコードではアプリの実行ファイル名ではなくアプリの実行ファイルのウィンドウタイトルを指定していました。
ウィンドウタイトルの場合は"ahk_exe"の記載は不要と認識していて、下記とするのがおそらく適切でした。

(誤)
GroupAdd(GroupA, "app1.exe")

(正)
GroupAdd(GroupA, "app1.exeのウィンドウタイトル")

つまり下記の①はウィンドウタイトルでの判定、②は実行ファイル名での判定になります。

①#HotIf WinActive("ahk_group" . GroupA)

②#HotIf WinActive("ahk_exe app2.exe")

②の"ahk_exe app2.exe"の部分ですが、こちらはウィンドウタイトルが可変する仕様のため、アプリの実行ファイル名を指定しています。
可変した際に多くのケースでGroupAのウィンドウタイトルが包含されたものになることに気付きました。

#HotIf WinActive()が何をもって真とするのか理解が不十分なのですが、もしウィンドウタイトルの部分一致でも真とする仕様なら②の中身の実行を想定していても①が実行されてしまうケースに納得できます。

今日時間がある時に#HotIf WinActiveの仕様について詳しく調べてみようと思います。ありがとうございます。
0977名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 11:43:55.16ID:d29CGPd00
>私の実際のコードではアプリの実行ファイル名ではなくアプリの実行ファイルのウィンドウタイトルを指定していました。

クズが
0978名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 11:54:55.51ID:bKQFDm5J0
長いとコード全部貼れないので関係無いと思ってるとろを簡略化して貼るのは仕方のないことだと思うが、
関係無いと思ってた部分に原因があると第三者からは解らないんで簡略化したそのものを書き換えず実際に実行
してみたほうがいいね。切り分け方法の1つだと思う。
0979名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 11:58:32.86ID:wwZIOroE0
貼る時に簡略化するんじゃなくて、自分で原因究明する時にどんどん削っていく
ここまで要素化してもまだおかしいので見て見て見て、になる
0980名無しさん@お腹いっぱい。
垢版 |
2024/01/22(月) 12:59:50.02ID:wrpkRwS00
挙動がおかしいと思う時の質問・報告は
誰でも再現できる手順を添えるのが面倒でも一番いいってテンプレに足す?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 713日 17時間 13分 29秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。

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