AutoHotkey スレッド part30 IDのみ
レス数が1000を超えています。これ以上書き込みはできません。
>>946
24インチFHD2台を±90度ピボットさせて、2160x1920 そんな感じで、正方形のディスプレイが理想なんだよな
縦に短いと折角フットプリントを都合しても、全然活かせない
ディスプレイの中の各ウインドウも正方形が理想
うちのブラウザとかエディタとかファイラーとかexcelとかはみんな正方形 縦1920無いと、スマホ用ページしか作ってない糞サイトが見辛い VDT作業的には、見上げる姿勢は良くないんだよな
まっすぐ前を見てディスプレイの上端が見える配置がいい
縦の長さは下へ延ばす
つってもキーボードより下は不自然なので、高さ60cmくらいに限界がある
縦横60cmの33.4インチディスプレイ 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 (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}")
}
} ahk_group って使わないけど、そういう使い方できるの? v2使ってないから検証できないけど、v2のリファレンスで「#HotIf」の項目見てみたら
#HotIf WinActive("ahk_group MyGroup")
↑こうなってるから後ろの「"」の場所違うような・・・ >>960
あ、すまん
GroupAが変数ならv1だと↓すればいいんだけどもv2も同じならこれでいけるはず(ahk_groupの後ろの半角空白入れるのを忘れずに)
#HotIf WinActive("ahk_group " . MyGroup) それは変数の連結。
MyGroupっていう文字列を指定したいなら "" 内で良いけど別途MyGroup変数に文字列を入れてると思われる。
自分もahk_group使ったこと無いのでよくわからんが、
#HotIfは中括弧のスコープ無効だよね。ホットキーとして正しく認識してないんじゃないか?
あとはMyFunc()の定義をどこにどういうふうに書いてるのかね? 皆さん、ありがとうございます。
>>960
>>961さんのご指摘通り、"ahk_group"の部分が文字列、 GroupAやGroupBが変数で中身にアプリ名を表す文字列を入れています。
>>961
ドット連結の書き方も試してみましたが、結果は同じでした。WinActive部分がWinExistのような挙動をしていて、必ず一番上の条件で真になってその中身が実行されるような挙動です。
>>962
#HotIf WinActive("ahk_group" GroupX)の後の{}を外してみましたが、結果は同じでした。同じくWinActive部分がWinExistのような挙動をします。エディタの自動インデント対策のためデバッグ途中で付けてしまいましたが、確かに本来の書き方では{}は不要かもしれません。
MyFuncは、上の方でClassを定義していて、そこの関数を呼び出しています。複雑な処理のためここには書ききれませんが、GroupAもGroupBもMyFunc()の呼び出し自体には問題なく成功します。 ごめんなさい。
WinActive部分が本当にWinExistのような挙動をしているのか確実には分からないのですが、必ず一番上の条件で真になってその中身しか実行されないようです。 GroupAとGroupB、中身が指すものが重複してたりして 今さらだが>>961分かりにくかったので訂正
間違い → #HotIf WinActive("ahk_group " . MyGroup)
こういうこと言いたかった↓
GroupAに"MyGroup"と言う文字列が入ってるとする
#HotIf WinActive("ahk_group " . GroupA) >>963
しつこくてスマンが
>#HotIf WinActive("ahk_group" GroupX)
↓これでもダメ?
何回も言うようだけど、ahk_groupの後ろ( " の直前)の半角空白入れるのを忘れずに
#HotIf WinActive("ahk_group " . GroupX)
もう寝ます >>965
ありがとうございます。
どうやらこれが原因でした。
(誤)
GroupA := "_"
GroupAdd(GroupA, "app1.exe")
GroupB := "_"
GroupAdd(GroupB, "app2.exe")
(改)
GroupA := "GroupA"
GroupAdd(GroupA, "app1.exe")
GroupB := "GroupB"
GroupAdd(GroupB, "app2.exe")
くだらない理由になってしまい申し訳ないのですが、変数が未初期化の状態だと表示されるエディタの警告が煩わしかったため、どちらのGroupも適当に"_"で初期化して中身が同じになってしまったことが原因のようでした。 もう一つ期待した結果が得られないパターンが出てきました。
#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")を実行して欲しい!) 【(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") GroupAdd(GroupA, "app1.exe")
↓
GroupAdd(GroupA, "ahk_exe app1.exe")
だったり? >>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の仕様について詳しく調べてみようと思います。ありがとうございます。 #HotIfの#でない版が欲しいんだけどな
なんでここはプリプロセッサのままなんだろう >私の実際のコードではアプリの実行ファイル名ではなくアプリの実行ファイルのウィンドウタイトルを指定していました。
クズが 長いとコード全部貼れないので関係無いと思ってるとろを簡略化して貼るのは仕方のないことだと思うが、
関係無いと思ってた部分に原因があると第三者からは解らないんで簡略化したそのものを書き換えず実際に実行
してみたほうがいいね。切り分け方法の1つだと思う。 貼る時に簡略化するんじゃなくて、自分で原因究明する時にどんどん削っていく
ここまで要素化してもまだおかしいので見て見て見て、になる 挙動がおかしいと思う時の質問・報告は
誰でも再現できる手順を添えるのが面倒でも一番いいってテンプレに足す? ハッタショは無理して回答側に回らなくていいぞ
迷惑だから このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 713日 17時間 13分 29秒 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login レス数が1000を超えています。これ以上書き込みはできません。