[過去ログ] AutoHotkey スレッド part33 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
832
(1): [sage] 2024/05/28(火) 18:28:42.65 ID:GwhjLoqu0(1)
v2を使ってあるゲームのwadsをカーソルキーに割り当てて使おうとしたのですがカーソルキーを押し続けると
ずっと押し続けたような状態になって元に戻らないことが頻発します
どうにかなりますか

#HotIf WinActive("ahk_exe 実行ファイル.exe")
Up::w
Left::a
Right::d
Down::s
#HotIf
833: [sage] 2024/05/28(火) 22:19:31.36 ID:90ET1uh60(1/2)
よく分からないけど押しっぱなし問題はちょいちょい起きる
解決できないのでリセット用のキーアサインを用意する
834: [sage] 2024/05/28(火) 22:24:40.68 ID:aSXazPJr0(1)
キーリピートをひたすら追っかけてるだけじゃないの
835: [sage] 2024/05/28(火) 22:36:49.87 ID:90ET1uh60(2/2)
LLフックの限界がある
より低いレベルから割り込まれると矛盾が起きる
状態変数とか持って複雑な管理をするほど壊れやすい
凝ったことはしないのが吉
836: [sage] 2024/05/28(火) 23:03:22.94 ID:4+RzNgio0(1)
キーボードやマウスのドライバが干渉するケースもあるね
特にマクロやジェスチャーが使えるタイプ
MSの標準ドライバにすると収まったりするけど
一部のキーが使えなくなったりと弊害も大きい
837
(1): 832 [sage] 2024/05/29(水) 10:30:30.84 ID:0KFDSECc0(1/3)
ダメモトでCopilotにきいてみたら3つ方法が提示されてそのうち
SendMode InputThenPlayを使用して、キーの入力を正確に制御できるようにするという
方法でうまくいきました

SendMode("InputThenPlay")
#HotIf WinActive("ahk_exe Urbek.exe")
Up::w
Left::a
Right::d
Down::s
#HotIf
838
(1): [sage] 2024/05/29(水) 11:39:16.75 ID:0KFDSECc0(2/3)
"Urbek.exe"というファイル名をうっかり書いてしまったがこれはゲームの実行ファイル名
他のウィンドウでもキー割り当てが有効になってまった
SendModeのすぐ下の行はなぜか実行されないようで、下に空行を付ける必要があった

SendMode("InputThenPlay")

#HotIf WinActive("ahk_exe Urbek.exe")
Up::w
Left::a
Right::d
Down::s
#HotIf
839: [sage] 2024/05/29(水) 11:42:33.86 ID:i+pm0mok0(1)
>>838
それって、
既知のバグなの?
840
(1): [sage] 2024/05/29(水) 12:56:48.34 ID:0KFDSECc0(3/3)
自分で色々試して対応した

2.0.7を2.0.15にバージョンアップしたら問題が発生しなくなった
バグが直されたのかもしれないね
841: [sage] 2024/05/29(水) 12:58:24.79 ID:mcawn8o40(1/2)
昔からある物理的に押下した修飾キーの押しっぱなし病も色々な対策例のうち

例1. ホットキーの先頭で修飾キー解放まで待つ(CtrlならKeyWait "Ctrl")
例2. SendをSendEventに置き換える

で再現しなくなったが例1は当然送信が遅くなるので例2と同じ意味になる
SendMode "Event"でまとめたらなぜか再現したので同じように空行にして様子見してみる
842
(3): [sage] 2024/05/29(水) 16:59:21.00 ID:VdSUJTRo0(1)
過去スレにあったやつ使ってて今のところ問題ない
forをloopにした

holdup_key() {
Sleep, 5
keys = ["Control", "Ctrl", "Shift", "Alt", "Win", "sc079", "sc07B", "sc070"]
SendInput, {Blind}{LControl Up}{LShift Up}{LAlt Up}
loop, 2
{
loop, len keys
{
省4
843: [sage] 2024/05/29(水) 17:21:36.85 ID:c0MwHFKi0(1)
>>840
半年以上前のバージョンじゃないか
さすがに古すぎ
質問する前にまず試すべき要件
844
(1): [sage] 2024/05/29(水) 18:51:10.93 ID:eu1JLHkv0(1)
なぜパッケージマネージャを使わないのか
845: [sage] 2024/05/29(水) 19:17:33.50 ID:mcawn8o40(2/2)
>>842
物理修飾キーを使うホットキーのSendの後にこれを実行する感じ?
同じようなことは散々試したけど、v2でキー履歴みると最後にdown状態送信するんだよなぁ
846
(1): [sage] 2024/05/29(水) 22:45:30.14 ID:JmkzWcXF0(1/2)
>>842
結果として問題が起きていないだけでコードとしては問題がありますね
その関数内で実際に機能しているのは
Sleep, 5
SendInput, {Blind}{LControl Up}{LShift Up}{LAlt Up}
の2行だけです
また、私見ですがその位置にあるSleepは効果があるようには思えません
現状問題が起きていないなら1行だけで良いはずです
847: [sage] 2024/05/29(水) 22:54:07.12 ID:VVdYEZwI0(1)
>>846
sleep入れると安定する
理由は全然わかんない
848: [sage] 2024/05/29(水) 23:15:12.84 ID:bUYrs4Wr0(1/2)
sleep 1
みたいなあってもなくても変わらない筈の処理が、
あると無いのとでは大違いだったりする

OS的には一旦処理を手放して、ぐるっと一周してから戻ってくるので、
他の処理との兼ね合いは全然違う
849
(1): [sage] 2024/05/29(水) 23:39:17.56 ID:JmkzWcXF0(2/2)
別に全ての場合においてのSleepを否定しているわけではありません
842の関数内で冒頭にあるSleepの効果に疑念があるだけです
850: [sage] 2024/05/29(水) 23:43:30.40 ID:bUYrs4Wr0(2/2)
不思議だろうけど、経験的にそうやったら上手く行ったという事実には敵わんよ
851: [sage] 2024/05/30(木) 06:15:06.98 ID:2ABqZiu20(1)
>>844

パッケージマネージャって?
852
(1): [sage] 2024/05/30(木) 14:03:36.11 ID:Hz3rfbTZ0(1/2)
>>849
もし解っているなら、
今後の人達のためにloopのところの処理 >>842 直してくだされー
853: [] 2024/05/30(木) 14:54:29.95 ID:ei9jYFav0(1)
[はい(Y)] [いいえ(N)]

というダイアログが出て、いいえを選択するのに無変換キーに

SC07B::Send, !n

を割り当てると、選択した後アプリケーションがハングアップしたのか操作不能になります。
原因分かりますでしょうか?
854
(1): [sage] 2024/05/30(木) 17:57:19.54 ID:mQOWoRzF0(1)
>>852
holdup_key() {
static keys := ["LCtrl", "LShift", "LAlt", "LWin"] ; ここに必要なキーを入れてください。修飾キーはおそらくLRを明記しないと正常にUpされないと思います
for k in keys
SendInput, {Blind}{%k% Up} ; v2 → SendInput("{Blind}{" k " Up}")
; 注意 Inputモードは一般的には信頼性が高いですが、特定の条件下では信頼性が低くなり不具合が発生する可能性があります
; 何らかの問題が発生した場合、とりあえずSendEventに変更し様子を見てください
}

元々の問題点として、keysへの代入演算子が=であるため、配列として代入されるはずであった右辺がそのまま文字列として代入されています
おそらく参考元がそうだったので、それを基準にしたforループが動作せずにloopに変えたんだと思いますが、そのloopも記述が間違っているため動作していませんでした
省2
855: [sage] 2024/05/30(木) 19:55:33.23 ID:GMdhSV1e0(1)
Release v2.0.16 · AutoHotkey/AutoHotkey · GitHub
外部リンク[16]:github.com
856: [sage] 2024/05/30(木) 22:39:40.36 ID:Hz3rfbTZ0(2/2)
>>854
ありがとう 勉強になった

holdup_key() {
Sleep, 5
keys := ["LCtrl", "LShift", "LAlt", "LWin", "sc079", "sc07B", "sc070"]
for k in Kyes
{
SendInput, {Blind}{%k% Up}
; SendEvent, {Blind}{%k% Up}
}
省1
857: [sage] 2024/05/30(木) 22:43:49.67 ID:HkIFscnF0(1)
Catcher in the Kye
858: [] 2024/05/31(金) 05:43:08.34 ID:4tZnxOlC0(1)
♪くろーるくろーるしてー
859: [sage] 2024/05/31(金) 11:15:20.46 ID:iNgtcMsL0(1)
これ動作をミリ秒で指定できるけど
リファレンスではOSの制限で10ms単位だと書いてあるけど
実測すると10msごとで変わってるわけでもないし
SendModeを変えても基本的に指定した数値より遅いし
同じ間隔で繰り返しても20msくらいバラツキが出る
もっと精細なキー/マウスマクロないかな…
860: [sage] 2024/05/31(金) 11:26:47.47 ID:+4t5vyZ70(1)
精密な連射が必要なゲーム?
861: [sage] 2024/05/31(金) 13:53:05.77 ID:zTrv5IQD0(1)
けど
けど
いし
いし
862: [sage] 2024/05/31(金) 14:27:36.69 ID:EJ+/rc9T0(1)
負荷が高いとOSの都合で、20msの遅延になるみたいなこと書いてあるから
普通の動作なのではないのかと
863
(1): [sage] 2024/06/01(土) 11:09:17.86 ID:GgBe8hMb0(1/2)
ahkv2で操作をマクロ保存するみたいなことって出きませんか?
windowspyて位置調べて、キー調べてクリックとかしてたんですが、便利にしたいなと思いまして
864: [sage] 2024/06/01(土) 12:30:18.09 ID:fn6gb9WN0(1/3)
理論的にはできると思うけど、すっげー面倒だと思うぞ
なぜなら、マクロが組めるアプリはコマンドにidが割り振ってあって
それをスクリプト経由で呼び出して自動化できるように設計してあるわけだが
そうでないアプリはキー操作と場合によってはマウス操作をエミュレートして
実現する必要があるから、最低でもCUI機能が付いたアプリでないと
少し前に話題になったスリープ問題じゃないけど調整が鬼畜になる
865: [sage] 2024/06/01(土) 12:35:20.42 ID:kVZkynXb0(1)
標準のspyはウンコだから余分な情報をはぎ取り好きなフォント、フォーマットになるように改造してそっち起動したほうがいいぞ
866: 863 [sage] 2024/06/01(土) 12:49:25.47 ID:GgBe8hMb0(2/2)
ありがとうございます。すみません。マクロって言い方が良くなかったです。

どちらかというと、下記のような動作を記録してahkv2のプログラムに落とし込むぐらいでいいんです。
100,100をクリック
100ms sleep
aを入力
100ms をクリック

いままで手打ちで作っていて、簡単にahkプロクラムを作りたいと思いまして。

もしかして標準であったりもしてましたか?
867: [sage] 2024/06/01(土) 13:15:07.31 ID:fn6gb9WN0(2/3)
その程度のことなら手打ちの方が全然早いと思うが
868: [sage] 2024/06/01(土) 13:25:36.67 ID:nbA7vng10(1/2)
v2だと記録用ソフト一から作ったほうが話早いと思う
v1でそれっぽいのならPulover’s Macro CreatorとAutoScryptoWriterがあるんで、
スクリーン単位のマウス座標でいいならコンバーター併用で何とかなるかもしれない

Pulover’sなら使ったことあるが俺環だとそもそもエディタがまともに動かず消したわ
869: [sage] 2024/06/01(土) 13:38:44.95 ID:fn6gb9WN0(3/3)
まあ座標なんかは自動記録があると助かるのはわかる
でも厄介なのは送信時の調整なんだよね
ウェイトをどれだけ入れるとか、eventで送るかinputで送るかみたいなのもあるし
自由度の高さゆえに結局手作業でちまちまいじる必要がある
場合によってはPower Automateみたいなのがニーズを満たす可能性もあるけどね
870
(1): [sage] 2024/06/01(土) 13:55:42.93 ID:nbA7vng10(2/2)
マウス座標はspy弄って現在位置クリップボードに保存できるようにしたな
追記数たいしたことないけどそれでも手間はそこそこ減る

座標複数保存して後で纏めて書く場合はtxt出力なりもう一工程いるけど
871: [sage] 2024/06/01(土) 14:18:01.56 ID:i40wQupA0(1)
使ったことはないですが
Pulover`s Macro Creatorなら公式フォーラムでv2対応のもの公開してる人がいますね
外部リンク[php]:www.autohotkey.com
872: [sage] 2024/06/01(土) 15:51:05.21 ID:vzzT1EY70(1)
>>870
txt出力する際に100,100をクリックとマクロに整形出力すればいい
873
(2): [sage] 2024/06/01(土) 18:04:08.73 ID:32L8ms0h0(1/2)
横からだけどちょっと似た?様な事出来ないかと前から思ってたので
ブラウザー(新規タブ)開いた時に任意の場所をクリックした後マウスカーソルは元の場所に戻る、みたいな事は可能でしょうか?(それかクリックしたのと同じ様にするがマウスカーソルは動かさない、とか)
どうしてかというと、サイトによっては開いた時に検索窓にカーソルが入れられてたりして読んで下に行こうとスペース押したり↓押したりしても動かず、あれっ?て思ったら検索窓の中という事がよくあり、どこかその辺をクリックしてからスペースや↓を押すという手間が発生
そのサイト内で検索はこちらがしたい時にするから毎回最初から検索させようとしないで欲しいのにさせて来る
それを回避するのには、開いた時どこかをクリックした事にすればすぐ読んで行ける様になります
場所によってはリンクをクリックして開いたりするかもなので無難に0,0か
仮にそれが出来るとしてもまだ問題があり、モニターが三枚なのでクリックして戻す場合一枚より困難?
クリックした事にして動かない場合なら関係無さそうですが
こんな事可能でしょうか?
長文失礼しました
省2
874: [sage] 2024/06/01(土) 18:06:51.57 ID:32L8ms0h0(2/2)
あ、すみません
それかサイト開いた時にサイト内にカーソルを置かずに浮かせる?みたいな指示は出来無いでしょうか?
875
(1): [sage] 2024/06/02(日) 09:51:16.64 ID:AKGUmcfY0(1)
>>873
条件: 新規ページが開かれた時 && ページロード完了時
処理: 現在のフォーカスが入力フォームならフォーカスを移動

後半はよくわかりませんが要約すると上記のようなことだと思います
AHKでやるにはブラウザを常時監視する必要があるため、あまりスマートではなく
その他の判定、処理も含め容易であるとは言えない方法に頼ることになります
python + seleniumなどでもできるとは思いますが導入から実装まで考えるとめんどくさいです

ブラウザ側で完結できるように、Greasemonkey系統のアドオンでJavaScriptでやるのが一番楽だと思います
ページロード時に入力フォームにフォーカスをセットする といった逆のことを行うサンプルはよくあるのでそれらを参考にしてみてください
876: [sage] 2024/06/02(日) 11:53:48.90 ID:8mnk/haY0(1/2)
>>875
レスありがとうございます
後半というのはマウスカーソル…辺りですかね
画面のどこかをクリックしたらそこにマウスカーソルも移動しちゃうじゃないですか
動かされたく無いので、動いても戻すか動かさないで済ませるやり方が無いかなと
やっぱりかなり面倒な事ですよね
JavaScriptの方が実現させ易いんですね
それで検索してみます、どうもありがとうございました
877
(1): [sage] 2024/06/02(日) 11:53:57.37 ID:SIHfqioA0(1)
↑↓にホイールアップ・ダウンを割り当てる
本当に↑↓キー使いたい徳困るけど(´・ω・`)
878
(2): 警備員[Lv.1][新芽] [;sage] 2024/06/02(日) 12:35:48.54 ID:kBPI+TMz0(1/3)
はじめまして
autohotkeyで複数のデバイスを利用する方法を探していてここに辿り着きました

blenderというモデリングソフトの利用時に、複数の外付けテンキーを並べてショートカット用のデバイスとして使用する方法を探しています
「Multi-Keyboard-For-AutoHotkey」というアドオン?を利用して、Aのテンキーのみにショートカットを割り当てるところまでは辿り着いたのですが、実際にblenderで利用すると割り当てたショートカットの機能と同時に従来のテンキーの機能まで動作してしまいます
(外付けテンキーABにそれぞれ別のショートカット、メインキーボードのテンキーで従来のテンキーの機能という動作を想定しています)

作成したコードは以下のとおりです。

; Keyboard 1 - Numpad1 key
if (KeyboardNumber = 2 and VKeyCode = 0x61 and WasDown)
Send +h

こちら従来のテンキーの機能を無効にして割り当てたショートカットだけが起動するように出来ないでしょうか
省1
879: [sage] 2024/06/02(日) 13:25:30.19 ID:0moOUe0Q0(1/5)
外付けテンキーをF13とかの何の機能も無いキーには割り当てられないの?
880: [sage] 2024/06/02(日) 13:53:21.73 ID:OOw5QptO0(1)
ハードウェア側でキーを割り当てられるキーボードを買えばいいんでは
881: [sage] 2024/06/02(日) 13:57:13.59 ID:0moOUe0Q0(2/5)
テンキーが2つあること自体は問題になってないんだよね
1-
あと 121 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.049s