AutoHotkey スレッド part33 (613レス)
1-

1
(4): [sage] 2024/01/23(火) 16:30:58.38 ID:VpJPb0gB0(1)
■公式サイト
外部リンク:www.autohotkey.com

■解説等
・v1.1
AutoHotkey Wiki
外部リンク:ahkwiki.net

・v2
クイックリファレンス|AutoHotkey v2
外部リンク:ahkscript.github.io
v1.1からの変更|AutoHotkey v2
省4
564: [] 2024/04/24(水) 23:31:44.64 ID:DQrkUuwo0(1)
まぁどんな年代であれだけ貰ったら
565: [sage] 2024/04/24(水) 23:56:13.98 ID:aBgFYHOd0(1)
パスワードを使い回している人はご愁傷様
裏ではないし
566: [] 2024/04/25(木) 00:45:18.69 ID:3uy0qHiZ0(1)
またに塗ったら
567
(1): [] 2024/04/25(木) 00:57:42.60 ID:UIFjLXbD0(1)
だから全力で支えてくれたんだろうな
画像リンク

568: [sage] 2024/04/25(木) 00:58:51.36 ID:SnCFIrCb0(1)
推しじゃないけどゲーミングお嬢様とか
569: [] 2024/04/25(木) 01:18:29.50 ID:Xzgg3PVF0(1)
暇なお盆休みにアイスタは優しく注意喚起したろ
570: [安倍晋三] 2024/04/25(木) 01:24:27.96 ID:mBXRPskV0(1)
>>567
澤さん zkzjzl R
嫌澤さん zkzkzl SR
女鹿澤さん zkzlzlzl SSR
儀賀澤さん zjzjzkzlzi UR
寺澤さん zkzkzl USSR
戸田澤さん zlzlzl LR
571: [] 2024/04/25(木) 01:49:46.16 ID:NCwzBTps0(1)
防衛はさらなる予算追加確実
川重追加なるか分からんが
外部リンク:llz.fch
572
(4): [sage] 2024/04/25(木) 11:41:07.22 ID:jv5oAMGO0(1)
Ctrl+↑(↓)は通常時ショートカットでHome(End)に割り当てられていて文字入力時は文頭(末)に移動に変わります
通常時Ctrl+←(→)は空いている(文字入力時は単語毎に前か後ろに移動)のでPgUp(PgDn)に割り当てたいんですが、文字入力時以外という指定って出来ますっけ?
wikiに「IMEが現在文字を入力している、もたは変換中であるかどうかを得ることはできる?」に「一部可能(インライン化しているアプリでは無理)」と書かれていますが、今でもそうなのでしょうか?
今v1.1.37.02ですがv2で可能なんて事あるでしょうか?
それか代替案があれば教えて頂きたいのですが、文字入力時諦めて常に効かせるくらいでしょうか?
何かアドバイスよろしくお願いします
573
(2): [sage] 2024/04/25(木) 12:00:58.77 ID:OGhPq50i0(1)
キャレット座標が入ってる組込変数A_CaretXとA_CaretYがあるけど
キャレットが無い時は空白になるらしいからそれでなんとかできない?
574
(1): [sage] 2024/04/25(木) 12:28:47.33 ID:V++ok1f30(1/2)
>>563
v2を覚えていくことをお勧めします。今からv1を習熟していく価値はありません

追加の質問についてですが、まずは自分で書いたコードを書き込んでください。大抵の場合はコードか設定に問題があります
あえてエスパーするならKeyWaitのキーの指定漏れとかだと思いますが、その質問の仕方では第三者から見た場合どこに原因が存在するかまったくわかりません
実際に環境面での問題が発生するのはレアケースであり、仮にそうだとしても回避策がある場合ほとんどですが、適切なヒアリングができない場合、第三者では解決できません

>>572
基本的には不可能です。IMEの仕様上の問題なのでv1でもv2でも同じです
IME.ahkのIME_GetConverting()で変換候補窓を取得することは可能ですが、IMEへのアプローチでは変換確定前の下線部のみの状態を取得することはできません
ただし、AccやUIAライブラリで下線部のみの状態のオブジェクトを認識できるのでがんばればなんとかならないこともないかもしれません

>>573
省1
575
(1): [sage] 2024/04/25(木) 13:29:37.63 ID:o5xHq4Bc0(1)
>>572
あなたが問題にしているwikiのURLを示す必要があるのでは?
示してないからあなたが何を言ってるのかがわからない
576
(1): [sage] 2024/04/25(木) 14:32:33.46 ID:xrsuOVDl0(1)
>>572
文字入力時以外=IMEオフ、ならば、
;v1スクリプト
#If ! IME_GET()
^Left::Send, {PgUp}
^Right::Send, {PgDn}
#If

文字入力時以外=IMEオフまたはIMEオンで未入力状態、ならば、
;v1スクリプト
#If ! IME_GET() || ! IME_GETConverting()
省4
577: [sage] 2024/04/25(木) 20:02:22.55 ID:qwj88I6c0(1/2)
v2のクラスメソッドってどう書くの?
廃止になっちゃったの?

class MyClass
{
Add(a,b)
{
return a + b
}
}

MsgBox(MyClass.Add(10,20))
578
(1): [sage] 2024/04/25(木) 20:44:46.03 ID:V++ok1f30(2/2)
その記述の場合、インスタンス化する必要があります
MC := MyClass()
MsgBox(MC.Add(10,20))

MyClassを直接参照するならクラス内の全てのメソッドとプロパティにstaticを宣言し、MyClassをシングルトンにする必要があります
class MyClass{
static Add(a,b){
return a + b
}
}
MsgBox(MyClass.Add(10,20))
579
(1): [sage] 2024/04/25(木) 21:04:08.39 ID:NqE1e19z0(1)
>>572
文字入力時って変換押した後?
なら変換キーでフラグ立てて、フラグ有効の間はショートカット無効
enter押したらショートカット有効にするとかでもできそう

個人的にはキーの見直しをお勧めする
条件次第で変わるショートカットは案外使いにくいよ
580: [sage] 2024/04/25(木) 21:59:53.31 ID:qwj88I6c0(2/2)
>>578
できた
ありがとう
581
(1): [] 2024/04/25(木) 23:28:20.18 ID:ebBUI0/90(1)
上で書いた長押しが反応しないというのは、下記の長押しした際の動作がききません。
キーボードのキーに割り当てると反応するので、マウスの仕組み上なのかなと思っていますが、
下記以外でも、長押しした場合と、ダブルクリックした場合で動作を変えるスクリプトを教えていただけないでしょうか。
v2です。

XButton2:: ;
{ ; V1toV2: Added bracket
ErrorLevel := !KeyWait("XButton2", "T0.3") ;0.3秒対象キーが押されたかどうか
If(ErrorLevel)
{
send "a" ;ここに任意のコマンド 長押し
省14
582: 警備員[Lv.2][新][苗][芽] [sage] 2024/04/26(金) 00:32:07.95 ID:sETLCzBx0(1)
みなさんありがとうございます
>>573
574さんが書いてる様に入力時は既にあるんですよね
>>574
基本的には無理なんですね
AHKで難しいのは出来そうに無いレベルです
>>575
wikiは1の物で、そこを特に問題にはしてないです
>>576
お、ありがとうございます
省7
583
(1): [sage] 2024/04/26(金) 13:04:28.77 ID:O4uf19cJ0(1/4)
>>581
少なくとも私の環境ではそのコードで正常に動作します
他の常駐スクリプト(v1v2両方)があれば終了して、その記述だけのテストスクリプトを起動して正常に動作するか試してください
それで正常に動作するなら既存のスクリプトのXButton2ホットキーが干渉しています。そうでなければ他の常駐アプリが干渉している可能性が高いです

マウスの挙動としては、ドライバアプリで変な設定をしているか、チャタリングが発生している という場合でない限り、XButton2の長押しができないということはないと思いますが
確認したいのであれば、ListLines()のみのテストスクリプトを他に常駐スクリプトがない状態で実行して
View → Key history and script info を表示し、F5で更新しつつXButton2を長押しして、正常に認識されているか確認してください

既存スクリプトのタスクトレイアイコンを 右クリック → Open または ダブルクリック でも同様のログを表示でき、前述したテストスクリプトだけのチェックをすっ飛ばして
XButton2押下時の実行ログやKeyhistoryを調べることもできますが、完全にスクリプト構造を理解出来ていないのであれば、個別に順序立てて調べていく方が良いと思います

下記以外でも と言うのは、別のアルゴリズムで同様の動作をするコードという意味でしょうか? そうであるならそれを求める必要性がわかりません
省17
584
(3): [] 2024/04/26(金) 14:21:19.03 ID:iAqLP9tU0(1)
USキーボードを普通に認識して刻印通りに入力できる状態で

+2::Send,{"}
@::"

などで一部のキーを109風に割り当てているんだが
右SHIFTだとAutoHotkeyが効かず通常入力になってしまう

RShift::Shift

とすると、キーボードテストサイトなどでは左右どちらも左SHIFTとして
認識するのに、やはり右だとAutoHotkeyが効かず通常入力になってしまう
省3
585
(2): [sage] 2024/04/26(金) 15:46:59.42 ID:SoWkdCK70(1)
>>584
2を"に変えるのはAHKの守備範囲外なんじゃないの
レジストリに書くだけのキー変更フリーソフトでできるはず
586
(2): [sage] 2024/04/26(金) 16:52:30.70 ID:vMLqj+un0(1/5)
#HotIf WinActive の中でInputBoxを使うと、
InputBoxから抜けた時にWinActiveの条件を満たさなくなって、
以降の処理が無視される
ちゃんと元に戻るにはどうすれば
587: [sage] 2024/04/26(金) 17:25:12.73 ID:O4uf19cJ0(2/4)
>>584
#UseHookを使うかホットキーラベルの先頭に$を追加してみてください

>>586
スクリプト内の上から順に#hotifの判定が行われますが、初期設定ではこの判定に1秒以上かかる場合
タイムアウトと判断され、それ以降の#hotif行はすべてfalseを返します
したがって、InputBoxなどの入力待ちするような物はまず正常に動作しません

詳しくはここを読んでください
外部リンク[htm]:ahkscript.github.io
588
(1): [sage] 2024/04/26(金) 18:00:50.58 ID:vMLqj+un0(2/5)
そんな感じでも無いみたい

対象のウィンドウが特殊みたいで、クリックした状態とフォーカスがある状態が別で、
フォーカスがあるだけだとキー入力が無視される
589: [sage] 2024/04/26(金) 18:10:40.52 ID:+HzGJ5Hf0(1/4)
>>586
#HotIf WinActive の中でInputBoxを使うとはどのようなコード?
^!c::
{
a := InputBox("入力してください", "入力").value
MsgBox "Control+Alt+Cを押しました" a
}
このコードで問題ないのでは?
590: [sage] 2024/04/26(金) 18:14:53.75 ID:+HzGJ5Hf0(2/4)
サンプルコードをこっちにする
#HotIf WinActive("ahk_class Notepad")
^!c:: {
a := InputBox("入力してください", "入力").value
MsgBox "Control+Alt+Cを押しました" a
}
591: [sage] 2024/04/26(金) 18:15:15.38 ID:O4uf19cJ0(3/4)
>>588
ホットキー押下でInputBoxを使用した場合、フォーカスが外れて元のウィンドウに戻らないと言うことであってますか?
そうであるなら、ホットキー押下時点でControlGetFocusを使用してフォーカス位置のhwndを取得しておき、InputBox終了後に戻せば良いです
592: [sage] 2024/04/26(金) 18:42:50.47 ID:vMLqj+un0(3/5)
MsgBoxはちゃんと動く
入力した数だけキーを押す、みたいなのが動かなくなる

実際には動いていて、アプリ側が無視してしまう
ウェイトを入れてその間にウィンドウをクリックすると動く
WinActivateでフォーカスを移しただけでは動かない

ControlGetFocus, ControlFocusも試してみる
593: [sage] 2024/04/26(金) 18:45:31.58 ID:+HzGJ5Hf0(3/4)
>>584
v2しか使ってないが
$+2::
{
Send "`""
}
$@::
{
Send "`""
}
省2
594
(1): ころころ [] 2024/04/26(金) 18:45:51.98 ID:Wiw+olk50(1)
>>583
ありがとうございます。切り分けしたところ、結論としては
下記の■のコードが邪魔しているようでした。
tooltip知らなかったんですが、便利ですね。
また、ご存知でしたら、下記の■の処理を入れた状態で、
長押しも実現するいい方法がもしわかればお教えください。
どういう分岐で動いているのか理解できないのですが、「XButton2」長押しなのに、
■の処理をまっているのか、長押しがどうさしないです。
=============================
#UseHook ;ホットキーラベルの定義で、常にフックを使用するようにする
省19
595: [sage] 2024/04/26(金) 18:58:33.05 ID:+HzGJ5Hf0(4/4)
たぶん2と"が同じキーだから無限ループ呼び出しになった
$をつけると無限ループにならないはず
596
(1): [sage] 2024/04/26(金) 19:35:57.03 ID:vMLqj+un0(4/5)
ControlGetFocusもうまく行かないけど、
InputBoxの後でMsgBoxを出すと何故かうまくいく
理由は全然判らない
597
(1): [sage] 2024/04/26(金) 20:00:42.60 ID:O4uf19cJ0(4/4)
>>594
XButton2 & LButtonがXButton2の処理を奪っているという状態になります
処理の流れとしてはXButton2押下から離されるまでの間にLButtonが押されなかった時だけXButton2の内容が実行されます
そのため長押しを検出することができません
下記のように~を先頭に追加してください。これはXButton2の処理を奪わないと言う指定になります
~XButton2 & LButton:: send "d"

ただし、この場合XButton2 & LButtonを実行する際にXButton2長押し時の処理が暴発するので#hotifで条件を分けるなどした方が良いです
長押し時の処理が他に影響を及ぼさない物でない限り、同条件下での併用は難しいと思います

>>596
状況や説明が断片的で把握できません。最終的にどうしたいのかもよく分かりません
省1
598: [sage] 2024/04/26(金) 20:34:12.12 ID:vMLqj+un0(5/5)
ahkがどうとかではなくて、対象のアプリ固有の話なのだろう
InputBoxとMsgBoxでは抜けた後のフォーカス周りが何か違う
599: [sage] 2024/04/27(土) 03:53:22.84 ID:yBsfu6Wj0(1)
vscodeのステータスバーにある
行、文字コードあたりの情報を取得する方法ないかな
画像リンク

600: 警備員[Lv.24][初]:0.00360841 [sage] 2024/04/27(土) 04:23:55.97 ID:vsLeKmXp0(1)
Acc-v2のExamplesが参考になりそうだ
外部リンク[ahk]:github.com
601: [sage] 2024/04/27(土) 11:41:32.12 ID:RdXRfe770(1/3)
>>597
よこですが
XButton2::だけだったらKeyWait(XButton2)がXButton2を待てるが
XButton2 & LButton::が追加されるとKeyWait(XButton2)がXButton2を待てなくなる
XButton2 & LButtonのキーが押されたかどうかを待たないといけなくなったから
ってことかなと思いました。
602: [sage] 2024/04/27(土) 12:02:54.56 ID:RdXRfe770(2/3)
文字コードは数が少ないからUTF-8の画像をImageSearch
603: [sage] 2024/04/27(土) 12:07:51.46 ID:RdXRfe770(3/3)
copy-current-line-numberというvscode拡張機能
604: [sage] 2024/04/27(土) 17:50:02.55 ID:H8A7Q3RP0(1)
sleep 1
があるのと無いのとで挙動が全然違う
605: [sage] 2024/04/28(日) 10:55:24.30 ID:eRcGuMBL0(1/2)
画像を検索してその真ん中をクリックしたいけど、そのままでは左上になってしまう
画像サイズって取得できる?
606: [sage] 2024/04/28(日) 12:26:13.69 ID:MuOAnsha0(1)
検索してでてきたのは
ひとつはGui.Add("Picture")つかう方法
www.autohotkey.com/boards/viewtopic.php?t=100320
もうひとつはGdip.ahkつかう方法
607: [sage] 2024/04/28(日) 12:42:22.87 ID:TThltIsz0(1)
ImageSearchでどうしてもゲームの画像認識が上手く行かなくてさんざん悩んだが
適当に*20にしていたのを*200に変えたら動きました。
608: [sage] 2024/04/28(日) 13:32:59.87 ID:eRcGuMBL0(2/2)
一旦表示しておいてそれを取得するということか
時間かかりそうな気がする
609: ころころ [] 2024/04/28(日) 14:01:24.45 ID:N1jPFR5J0(1/3)
>>585
元々は日本語キーボードと併用でUSキーボードも日本語キーボートとして
誤認した状態の是正と日本語キーボードに寄せるためにAutohotkeyを使い始めた
^6::send, {'}
*&::send, {^}
*'::send, &
*(::send, *
*)::send, (
*+0::send, )
*=::send, ~
省22
610: ころころ [] 2024/04/28(日) 14:03:22.32 ID:N1jPFR5J0(2/3)
>>585
後にUSキーボードだけになると日本語配列に寄せた部分だけ使いたくなった
それで手探りで↓なった、だが右SHIFTが機能してくれない、今がココ

`::Send, {vkF3sc029}
;+::Send, {\}
;\::`
+2::Send,{"}
@::"
+-::Send,{~}
~::-
省18
611: [] 2024/04/28(日) 14:28:20.96 ID:N1jPFR5J0(3/3)
ぶっちゃけ右SHIFTを押しながらーで~が入力できるようになってくれればいい
612: ころころ [sage] 2024/04/28(日) 14:43:41.45 ID:1hUHuOpa0(1)
外部拡張使わずに画像の真ん中クリックしたいってことだと思うけど、
検索元画像のwとh割ってimagesearchのxとyに足すのではいかんのか?
613: [sage] 2024/04/28(日) 15:07:50.87 ID:LSwvUIhZ0(1)
スクリプト起動時か関数初回動作時に画像サイズを1度だけ取得する方法にすれば実行時間を気にする必要はないです

興味があったので、仮に動的に画像を変更するので前もってサイズを取得できないと言う場合だとして、検証してみましたが

Gdipを使う方法だと10000回試行で1回当たり
初期化及び後処理を含める場合、約4ms、サイズ取得のみの場合、約0.25ms
guiを使う方法だと10000回試行で1回当たり
初期化及び後処理を含める場合、約7.5ms、サイズ取得のみの場合、約0.05ms
となりました

いずれにせよ実行時間が問題になることはなさそうです
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.305s*