探検


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/09/26(土) 20:02:44.95ID:9mJySQ+70
>>477
おま環かおま環じゃないかの切り分けは大事だろ
トラブルシューティングにおける基本中の基本
現に>>473はその切り分けすら出来ずに質問してたわけだしな
2020/09/26(土) 20:55:15.81ID:b8mjfegu0
まずは、新パソコンと旧パソコンに常駐しているソフトが全く同じなのかどうか
2020/09/26(土) 21:29:01.67ID:f4zsWHI60
すいません、お騒がせしてますね。
解決はできなかったですが、スクリプトじゃなくその他が原因だとわかったのはとてもありがたいです。
2台のパソコンは常駐ソフトは似てますが全部は同じではありません。
2020/09/27(日) 14:41:21.39ID:StjMx0SL0
タスクビューが1万倍使いやすくなった

#IfWinActive,
!Tab:: ; Alt+Tabでタスクビューを表示
Send,#{Tab}
return

;; タスクビュー
#IfWinActive, タスク ビュー ahk_exe explorer.exe
+!Q::EditMe(A_LineFile, A_LineNumber)

w::up
a::left
d::right
s::down
q::#^left
e::#^right
2020/09/27(日) 14:49:53.29ID:StjMx0SL0
f::LWin
目当てのアプリがないならfから起動できるとなおいいな
2020/09/27(日) 15:21:40.68ID:7rVPZP7w0
Autohotkeyのアイコンを右クリックしてopenした時と同じ様な動作をするスクリプトはどうやればいいのですか?
2020/09/27(日) 16:28:31.83ID:ZLd5kCP80
>>483
専用のコマンドは無いんじゃないかな
キーボード操作をマクロ化するなら>>221
頭文字「A」の常駐アプリがトレイに複数ある場合はAを複数回押せばいい
2020/09/27(日) 16:45:19.32ID:ZLd5kCP80
今夜はRIZINか
天心がバカンサイ人皇治をボコるの楽しみだな
2020/09/27(日) 16:45:39.69ID:ZLd5kCP80
すまん誤爆った
2020/09/27(日) 17:17:45.48ID:YgR/T/tm0
>>483
ListLinesのこと?
2020/09/27(日) 17:26:55.85ID:mzMuBKWz0
>>483
ListLines

Viewメニュー内のその他の項目も

ListVars
KeyHistory
ListHotkeys

でそれぞれ直接指定可能
2020/09/27(日) 19:15:57.97ID:4+4A5UVO0
>>483
DetectHiddenWindows
SetTitleMatchMode
PostMessage
2020/10/02(金) 15:18:29.95ID:GM4xvjP40
トラックパッドの4本指の左右ジェスチャの仮想デスクトップの切り替えの
にゅるっとした動作の量を測って、何回振ったら何の動作するってやりたいんだけど
仮想デスクトップの切り替え中のアニメーション遷移してるパラメってどこ見ればいいんでしょ
2020/10/02(金) 16:33:04.78ID:voPv3vuf0
トラックパッドの特殊ジェスチャーはAHKであれこれするの無理じゃね
2本指スクロール程度ならキーヒストリーでも検出できてるけど
3本指左右(タスク切り替え)とか4本指左右は何も検出されないし
2020/10/12(月) 15:31:13.11ID:DEG2vDeD0
ctrl alt deleteって割り当てるの不可能?
プログラムキーボードでも割当不可だからやっぱり無理なのかね
2020/10/12(月) 16:00:57.42ID:VphcfQuD0
Send, ^!{Del} は反応しないね
でも使うのってタスクマネージャーくらいじゃね?
Run, taskmgr.exe
で起動できるからctrl+alt+delete割りあてる必要も無いんだが
494名無しさん@お腹いっぱい。 (ワッチョイ db05-IVWr)
垢版 |
2020/10/13(火) 21:15:38.19ID:WIV8aGwm0
IMEがオンの時だけ、
「x」キーと「ー」を入れ替えたい

;;☆Google Chrome
;;☆Microsoft Edge
LAlt & w::Send,^w
2020/10/13(火) 22:07:35.42ID:5Y5Xe4mA0
>>494
>IMEがオンの時だけ、「x」キーと「ー」を入れ替えたい
IME.ahk使えば実現できるんじゃないかな

下3行の意味が分からない
2020/10/14(水) 08:41:21.44ID:WcY97C4k0
>>494
全角のエックスを打てなくなりそうだけど良いの?
2020/10/16(金) 02:29:08.51ID:kB4NCdNb0
キーボードが手元にない時にマウスだけでホットキーが出来ないか試行錯誤してます
やりたいことは下記です

「Lボタンを押しながらマウスホイールを下に回転させた場合に発動」

LButtonWheelDown::
LButton,WheelDown::
{LButton}{WheelDown}::

いずれの方法でもホットキーが実行されませんでした

どなたかアドバイスいただけますでしょうか

またマウスでのホットキー実行についてこの方法の方が便利だなどありましたら
そちらも教えていただきたいです
498名無しさん@お腹いっぱい。 (ワッチョイ 9f5a-fMdf)
垢版 |
2020/10/16(金) 02:39:14.20ID:jICo6JW00
>>497
Wikiをきちんと読もう
2020/10/16(金) 03:30:31.16ID:kB4NCdNb0
>>498
とりあえずホットキー関係とマウス関係のページは読みましたが参考になる記述は見つかりませんでした…
2020/10/16(金) 03:34:12.13ID:UZRXYnGU0
>>499
ホットキーの中に必ず書いてある
ちゃんと一行ずつ理解しながら読め
2020/10/16(金) 05:30:11.79ID:kB4NCdNb0
みつかりました
&でつなぐんですね…なるほど


ホットキーの出し方はわかったものの機能の実現は出来なかったので続けて聞かせてください


・やりたいこと
デュアルモニター使用時に、マウスを使ってアクティブなウィンドウをモニター間を移動させる
(デュアルモニターだけど横に並べずにお互いに見えない位置に置いている、リビング用とキッチン用モニター)

アクティブなウィンドウをモニター間移動するショートカットはシフト+Win+→キーなのでこれを使う


・書いたコード
マウスを右クリしながら左クリックで発動(発動の仕方は何でもよい)

~RButton & LButton::
Send +#{Left}
Return


・結果
アクティブなウィンドウが目の前のモニターにある時は、他のモニターにウィンドウを移動出来た
しかし、見えない他のモニター上のウィンドウを目の前のモニターに移動させることが出来なかった

タスクバー上で目的のウィンドウをクリックしていったんアクティブにしても
ホットキーを使ったとたん、マウスカーソルの位置がクリック状態になるのが原因



ここまでで力つきました、どなたかアドバイスなどお願いします
2020/10/16(金) 05:39:16.59ID:QFUkX31o0
マウス操作がメインならMouseGestureLを使いなさいと
ahkのスクリプト知識がなくても大概のことができる
2020/10/16(金) 09:16:33.87ID:QGtun8kL0
マウスクリックした段階でクリック位置にフォーカス切替わるのがOS仕様なので
>502の言うようにマウスジェスチャソフト使うか
~外してXbutton12などのドラッグに影響のないボタンに割り当てる方がスマートだと思うけど
どうしても右クリトリガでやりたいなら実行前に Send !{Tab} 入れて失ったフォーカスを戻してやったらいいんじゃね
時間調整は適当にsleep入れる

けど根本的な問題としてディスプレイ設定ををミラー(複製)で使うのではあかんのか?
2020/10/16(金) 10:20:29.34ID:kB4NCdNb0
>>502
>>503
マウスジェスチャーをAHKで書くの面倒だなと思ってたんですが
書いて配布してる人がいたんですね、便利、後で試してみます

たしかにデュアルで使う意味あるのかと思われるでしょうが、
HDMI切り替えで更にもうひとつのモニターを拡張?で使う機会があるので、
マウス操作で切り替えが便利なのでした

ありがとうございます
505名無しさん@お腹いっぱい。 (ワッチョイ eb76-T518)
垢版 |
2020/10/18(日) 00:02:18.85ID:Cg8HaPH50
以下のスクリプトについて、改善案を頂きたいです。
https://pastebin.pl/view/0c9f86a2
※PasteBinからコピペして動かしてみてください。

このスクリプトでは、例えば次のように、キーボードをスクリプト実行用の盤面にシフトして運用することができます。
「変換+Aの後R押下::AutoHotkeyをリロード」
「変換+E→C::1行コピー」
「変換+E→D::全消去」

問題点は、
@上記スクリプトにて☆をコメントした部分について、スクリプト登録の際に複数回同じ文言を入力する必要がある。
Atoggle_aが有効な状態でtoggle_eも有効にしてしまうことが可能。
です。

この解決のためにヒントを頂きたく思い、書き込みました。

便利ではあると思いますので、ぜひ使っていただきたいという思いと共に、改善を施せればと思っております。
2020/10/18(日) 00:32:43.14ID:8B492qWs0
function内にstaticでフラグ持っときゃいいんでない?
2ストロークキーについては車輪の再開発な気がしなくもないが
2020/10/18(日) 08:49:56.58ID:IpkYdAIV0
>>505
俺が自前で2ストロークキーを実装した時は、
Input,key,L1 T10.0,{Space}
で次の1キーが押されるのを待って
if(key=="c") とか if(key=="d") で分岐してたなぁ。
2020/10/18(日) 09:08:07.38ID:LZFs63+60
>>507
{
if key = c
ほにゃ
ふが
}else{
じゃあかんの?昔の.ahkにそんな書き方してあるけど

マルチストロークもあった気がするけどどこだろう……
2020/10/18(日) 11:56:02.54ID:tErQ0Iyy0
>>505
自分ならこういじるかな
ttp://pastebin.pl/view/raw/c743ddba
2020/10/18(日) 14:38:25.01ID:tErQ0Iyy0
>>509は、なんかいろいろとおかしいのでスルーしてください。<(_ _*)>
511名無しさん@お腹いっぱい。 (ワッチョイ 8230-8DiG)
垢版 |
2020/10/21(水) 17:33:42.16ID:p/8W4acR0
3を押したらF3を出力して、
その後5000msの間、3を押してもF3を出力させない
というスクリプトをつくりたいんだけど
Blockinputで特定のキーの入力だけブロックすることができないから困ってます。
なにかほかに手はないでしょうか
2020/10/21(水) 18:05:58.87ID:gKsHzB9x0
send前にif分岐してA_TimeSincePriorHotkeyが5000ms未満だったら弾けばいい
513名無しさん@お腹いっぱい。 (ワッチョイ 8230-8DiG)
垢版 |
2020/10/21(水) 19:18:17.24ID:p/8W4acR0
なるほどそんな手が!ありがとう
514名無しさん@お腹いっぱい。 (ガックシ 06e6-bMs7)
垢版 |
2020/10/22(木) 00:36:46.32ID:+oFWEyP36
>>505です

皆さんありがとうございます。
時間が取れなくなったため、お礼だけ言いに来ました。

頂いた情報をもとに、近いうちに改めて検討してみます。
515名無しさん@お腹いっぱい。 (ワッチョイW 712d-rZCk)
垢版 |
2020/10/22(木) 11:29:24.22ID:uHQQeSKa0
ええで
516名無しさん@お腹いっぱい。 (ワッチョイ 46c0-8DiG)
垢版 |
2020/10/22(木) 17:31:33.33ID:k3pJj+AJ0
設定に苦慮しており、助けていただけると嬉しいです。

やりたいこと:テンキーのEnter(NumpadEnter)を押している間、Ctrl+Shiftに置き換えし、
テンキーのEnter(NumpadEnter)を二回押し、2回目を押している間、Ctrlに置き換え。

*NumpadEnter::
Keywait, NumpadEnter,
Keywait, NumpadEnter, D T0.15

で色々試していますが、二度押し&押しっぱなしにしか対応できず困っています……。
よろしくお願いします。
2020/10/23(金) 19:49:38.35ID:6sZqIp1O0
iTunesの再生停止、曲送りを割り当てることって出来ないですかね
Media_Play_Pauseを使っても動かなくて困っています
powermateのような外部デバイスでの再生停止は動くのですが…。
2020/10/23(金) 22:24:48.75ID:xLBME1pE0
>>517
諦めたんじゃなかったのかw

COMオブジェクト操作したり
https://note.com/takanaction/n/n608bd1c598b9
ショートカットキーを送ったりすれば良いんじゃない?
https://www.autohotkey.com/boards/viewtopic.php?t=62090

メジャーなソフト用のスクリプトはいろんな人が作ってるから、「autohotkey itunes」みたいにググって参考にすると良いかも
2020/10/23(金) 23:06:56.54ID:0x9R3Tzg0
>>517
>>336-340辺りのやつか?
まずはメディアキー自体が正常に機能しないお前のPC環境の問題を解決しろって
iTunesに限らずメディアキー自体が効いてないってことはahkの問題じゃないんだから
2020/10/24(土) 02:19:29.00ID:T5kTB8Vu0
>>519
iTunesにメディアキーを送るソフトを使用した所
https://i.imgur.com/0vvO32H.png
このようにFailed to set hotkeyのエラーが出ました。
メディアキーの機能が死んでいるのは明白なのですが、メディアキーを復活させる方法が一向に分かりません。

かなり調べたのですが出てきたこちらの記事を
https://www.reviversoft.com/ja/blog/2014/06/what-to-do-when-your-media-keys-no-longer-work-on-your-keyboard/
試したのですがやはり駄目でした。(Human Interface Device Accessはそもそも動いていた)

windows10のメディアキーが効かない場合に動くようにする方法は無いでしょうか…。
本当に情報がありません。
2020/10/24(土) 02:27:13.11ID:S/98U1OW0
>>520
ス レ チ
2020/10/24(土) 03:24:06.87ID:T5kTB8Vu0
>>521
そうですよね windowsスレやソフトスレで聞いても誰も分からなかったのでつい質問してしまいました
すいません
2020/10/24(土) 03:28:27.47ID:+MpvyafJ0
当たり前だろ
誰もお前のPC環境全く知らないし
触ってみなきゃ分かる訳ねえんだから
2020/10/24(土) 05:43:40.33ID:DDIUlkSX0
>>517
powermateのドライバとかが競合してんじゃないの?
2020/10/25(日) 12:47:57.82ID:aQtH8BBo0
ユーザー切り替えした時切り替え前のアカウントで動作させ続けるのは可能?
loopカウントを数えるだけのスクリプトは裏で動いてたけどメモ帳に文字を送り続けるようなやつは切り替えの時点で途切れてる
UWSCでも同じ感じで駄目だったし元のアカウントでのウィンドウのアクティブ化はやっぱり無理かな
2020/10/25(日) 15:16:53.36ID:cnuvEfeua
>>525
>ユーザー切り替えした時切り替え前のアカウントで動作させ続けるのは可能?
それができたらOSの欠陥だと思うけど
どういう理由でアカウントを切り替えて切り替え前のユーザのプログラムを継続させたいいんだ?
ユーザをログアウトせずにあるプログラムだけ別アカウントで動作させることができる
(runas ソフトによってはできない)が
そういう方法と組み合わせて近いことをすることはできないのかな
2020/10/25(日) 15:30:25.71ID:cnuvEfeua
>>526
ユーザー切り替えなのでログアウトは間違い
誤:ユーザをログアウトせずに
正:現在のユーザーのまま
2020/10/25(日) 15:36:37.14ID:cnuvEfeua
>>526
なんか勘違いしてた
切替えた先のユーザが切替え前のユーザのプログラムを確認すると途切れてるということではなく
前のユーザに戻ったときに途切れてるということか
2020/10/25(日) 17:47:07.25ID:uaVWnWQJ0
>>525
GUIの操作は無理じゃない?
vimとかnanoみたいなコンソール型のテキストエディタのwindows版を使ったら?
2020/10/25(日) 21:50:52.06ID:aQtH8BBo0
裏でGUI操作させたままユーザー切り替えするのは無理そうですね
ありがとうございました
2020/10/26(月) 23:55:07.30ID:0nLQayUp0
最新のMS-IMEの仕様だと、
Autohotkey IME制御用 関数群 (コピペ/組込用)(IME.ahk)
の更新が必要か?
2020/10/30(金) 17:11:57.65ID:Ndf4EDLW0
>>531
IMEが有効な時にキーの置き換えを無効にしたくて、特定のアプリでは無効になってくれるのに
メモ帳では無効になってくれません
これってその仕様のせいですかね?


#include <ime>
#If ! IME_GET()
a::b
#If
Return
2020/10/30(金) 18:12:07.34ID:Ndf4EDLW0
指定したアプリ以外ではスクリプトを無効にしたいのですが、”#IfWinActive”で指定しても、”#If ! IME_GET()”を入れると指定以外のアプリで実行されてしまいます
指定したアプリ以外の場合は”#If ! IME_GET()”の部分を読まないようにするにはどうすればいいでしょうか


#IfWinActive ahk_exe notepad.exe

#include <ime>
#If ! IME_GET()
a::b
#If

Return

#IfWinActive
2020/10/30(金) 18:28:45.29ID:PSQm7T6f0
#If~ は次の #If~ が出現するまで有効、つまり一行目の #IfWinActive ahk_exe notepad.exe は無意味

条件を複数指定したければ式を引数に取る #If を使う。↓こんな感じ

#If WinActive("ahk_exe notepad.exe") && !IME_GET()
2020/10/30(金) 19:23:52.66ID:Ndf4EDLW0
>>534
やりたいことができました!感謝します!!
2020/11/01(日) 18:48:49.89ID:f8skW5aS0
複数のスクリプトを起動させている時のリロードは全てのスクリプトがリロードできるのでしょうか?
2020/11/01(日) 19:11:40.19ID:Lmt/WVPq0
>>536
ABCDの4つのahkが起動している時、Aのahkでreloadを実行すると、BCDのahkもreloadが実行されるのか?
という質問ならノー。
2020/11/01(日) 19:14:51.80ID:cum2FKsZ0
自分だけだよ
ただ親スクリプトのautoexecuteで子スクリプトをまとめて起動して
全ての子スクリプトを #SingleInstance FORCEにしておけばリロード一発で全再起動にはなる
2020/11/01(日) 20:13:11.39ID:f8skW5aS0
>>537-538
ありがとうございます。その方法を調べて試してみます
2020/11/01(日) 21:38:30.40ID:+lp4/pQd0
今まで使えてたんですが、最近のバージョンアップのせいか、気づいたら使えなくなってました。
仕様変更があったみたいなインフォあったらページ教えてくれると嬉しいです。

キーを長押しした場合に分岐する関数です。
この「Time=0.2」の部分が機能しなくなりました。
初期値を指定して省略する、ということをせず、
関数を呼び出す際、省略せずに逐一「,"0.2")」と記述すれば機能するので、
現状すべてそれで修正しました。

また、数値を「Time=0.5」にすると一応分岐が機能するんですが、
体感的にどうも1.0秒くらい押しておかないと長押し判定されないんです。

Hold(Key, SendA, SendB, Time=0.2)
{
KeyWait, %Key%, T%Time%
If (ErrorLevel=0)
{
Send, %SendA%
}
Else
{
Send, %SendB%
KeyWait, %Key%
}
}

F1::Hold("F1", "{F1}", "^{F1}")
2020/11/02(月) 04:26:40.82ID:YjDJU8KL0
すみません自己解決しました!
バージョンアップのせいなんかじゃありませんでした・・・

別の関数の都合で以下のようなものを書いていたのですが、
SetFormat, float, 3.0
これ計算結果に対してだけ効果のあるものだと思ってたんですが、
関数の初期値に指定した数値にも影響するみたいでした。
0.5という指定のときに1.0に四捨五入されるのも納得です。

自分がアホでした、スレ汚しごめんなさい。
2020/11/04(水) 07:17:56.05ID:fAt0anr70
PageUpをWin+L(ロック)にしたいのですが、上手く動きません

PgUp::#l
で動きません…
これは何が原因なのでしょうか
2020/11/04(水) 07:27:24.69ID:fAt0anr70
>>542
自己解決しました
DllCall('LockWorkStation')
2020/11/04(水) 07:50:49.25ID:hfaH06vJ0
珍しいやつがいるな
545名無しさん@お腹いっぱい。 (ワッチョイ 6176-9BKS)
垢版 |
2020/11/04(水) 17:16:09.35ID:1IOEDSZU0
真にマルチスレッド化する方法は、どうしてもないのでしょうか?
例えばAutoHotkey.exeをコピーして、別で実行してみても、それぞれのスクリプトは疑似マルチスレッド的に動作しています。
PCの一般ユーザーでエンジニアではないです。根本の仕組みがわからないために湧いた疑問なのですが、
何とかして別のソフトのように実行できないものでしょうか?
2020/11/04(水) 18:08:51.47ID:RBW8HZXS0
>別のソフトのように実行
同じスクリプトを同時に実行したいってことなら #SingleInstance Off
2020/11/04(水) 18:25:04.69ID:ZyxeyMFR0
>それぞれのスクリプトは疑似マルチスレッド的に動作しています。

の意味が分からん
真マルチスレッド的な動作と何が違うん?
2020/11/05(木) 18:07:56.73ID:I/mZi28I0
新しいパソコンで、ジョイパットが反応してくれません

AutoHotkeyのウィンドウ(実行履歴とか変数一覧を表示してくれるやつ)が
アクティブ状態だと何故か普通に反応するのですが、それ以外ではうんともすんとも言ってくれません
この症状に心当たりある人ますか?
2020/11/05(木) 21:20:37.23ID:yGBOughe0
#If系のディレクティブが誤爆してんじゃないの
2020/11/05(木) 22:18:37.85ID:I/mZi28I0
検証用に数行だけ書いたスクリプトでやってみてもダメなので#If系は関係なさそうです
一応、JoyToKeyは正常に反応するので、

ジョイパット操作をJoyToKeyで受ける→JoyToKeyが出力したキー操作をAutoHotkeyで処理する

ということは出来そう
ただ、書き直しが面倒なうえに処理がややこしいので、できれば避けたい
2020/11/05(木) 22:45:03.39ID:GGl1mCW80
>>550
その検証用スクリプト貼ったら?
2020/11/05(木) 23:50:16.43ID:I/mZi28I0
検証用といっても、ツールチップでジョイパットの状態を表示しているだけです。
SetTimer, Timer, 100
Timer:
  GetKeyState, joyx, JoyX
  GetKeyState, joyy, JoyY
  GetKeyState, joy1, joy1
  GetKeyState, joy2, joy2
  GetKeyState, joy3, joy3
  GetKeyState, joy4, joy4
  ToolTip,%joyx% %joyy% ,0,0
  ToolTip,%joy1% %joy2% %joy3% %joy4%,1,25,2
return
joy1::ToolTip,1,1,50,3
joy2::ToolTip,2,1,50,3
Joy3::ToolTip,3,1,50,3
Joy4::ToolTip,4,1,50,3
2020/11/06(金) 00:51:44.04ID:IZlN468w0
>>552
試したけどスクリプト自体は何も問題なく動いてる
AHKのウィンドウを出さなくてもX軸やY軸やボタンも取得してツールチップに表示されてる
Chromeやメモ帳などアクティブ時でも問題なし
JTKも常駐させてるけど併用して問題ない

となると貴方の環境で何か別のスクリプトや他の常駐ソフトなどが邪魔してるんじゃない?
ちなみにスクリプトを管理者権限で実行してもダメ?
2020/11/06(金) 01:58:35.01ID:03VprpHh0
新しいPCと古いPCの環境の違いを書き出してみるといいよ
多分OSのビルドやahkのバージョンあたりに細かい差異があるんでないの
知らんけど
555名無しさん@お腹いっぱい。 (ワッチョイ 6176-9BKS)
垢版 |
2020/11/06(金) 04:26:02.69ID:Cd90Lss80
>>546
>>547

例えばAutoHotkey.exeをリネームしたa.exeとb.exeを用意します。
それぞれa.ahkとb.ahkを実行します。
どちらのスクリプトにもループ処理が入っています。
これらのループ処理を両方実行した場合、片方のみ実行するより動作が鈍くなります。
つまり実行ファイルを分けても、それぞれが割り込みあっているのだろうと思います。
これを、完全に別物として実行させたいわけです。
2020/11/06(金) 08:28:24.96ID:RAq9Icdy0
>>555
動作コアを分ける
でググってみたらどうだろ?
2020/11/06(金) 14:28:42.61ID:03VprpHh0
スレッドとプロセスがごっちゃになってるぽい?
https://image.itmedia.co.jp/ait/articles/0503/12/dt-mthread01_02.gif

>555
exe(プロセス)を分けて動作が遅くなるっていうのは
色んなアプリを一度に立ち上げて動かしてたら1窓単体起動のときより重くなりましたつってるのと同じでは?
>556の言うように手動で任意のCPU割り当てる方法もあるけど
プロセス別のコア割り当ては基本OS側の仕事だと思う

同一プロセス内でのマルチスレッドについては
AHKは擬似マルチスレッドなのでマルチコア対応はしてないと思う
2020/11/06(金) 16:31:41.10ID:pYlpzeSL0
>>555
どんなループ処理してんだ
1秒に何百回みたいなループさせてんのか?
559名無しさん@お腹いっぱい。 (ワッチョイ 6176-9BKS)
垢版 |
2020/11/06(金) 21:48:27.22ID:Cd90Lss80
>>556

検証用のスクリプトは用意していないので、わかりにくいかもしれませんが現状を話します。
何が関係しているかわかりませんから、念の為詳細に書きます。

AutoHotkey.exeでAutoHotkey.ahkを常駐させています。AutoHotkey.ahkにIncludeしているスクリプトがいくつかあり、
そのうち1つがキーボードでマウス操作をする、mouse.ahkです。
あるトリガーキーを押してから、再度そのキーを押すまで、キーの入力をwhile、if、GetKeyStateでループ、監視し続けます。
そこでカーソル移動用のキーを押すと、MouseMoveを発動します。発動間隔は監視間隔なので、20ミリ秒程度の設定になっています。

これとは別に、MouseGestureL.exe(AutoHotkey.exeを改名した別ファイル)も常駐させています。

そこで問題なのが、MouseGestureL.exeを終了させると、AutoHotkey.exe下のmouse.ahkによるマウスカーソルの移動速度が上がります。

このことから、AutoHotkey.exeとMouseGestureL.exeで別プロセス?として実行していたはずのスクリプトですが、相互にスレッドを奪い合って?いるのではないかと思いました。
MouseGestureL.ahkの仕様はわかりませんが、ループ処理がなされているのだろうと推測しました。

ともかく、実行ファイルもスクリプトファイルも分けて、独立したはずのアプリケーション同士が干渉しあっているので、
疑似マルチスレッド動作になっているのではないかと思いました。

以上です。
これを互いに完全に独立した動作にする方法がないかと思い、質問しました。

関係するかわかりませんが、CPUはi7-8700Kです。
560名無しさん@お腹いっぱい。 (ワッチョイ 6176-9BKS)
垢版 |
2020/11/06(金) 21:48:50.69ID:Cd90Lss80
>>557
>>558
2020/11/06(金) 22:02:37.65ID:pYlpzeSL0
そもそもAutoHotkey.exeを改名とかやってることが特殊過ぎてな
意味あんのかそれって感じだし
まだコンパイルしてスクリプト自体を別exeにした方がいいんじゃねえの
562名無しさん@お腹いっぱい。 (ワッチョイ d25a-t1Nk)
垢版 |
2020/11/06(金) 22:14:53.95ID:94t2tBdQ0
>>559
>そこで問題なのが、MouseGestureL.exeを終了させると、AutoHotkey.exe下のmouse.ahkによるマウスカーソルの移動速度が上がります。
MouseGestureL.exeも基本常駐じゃないの?終了即再起動することはあるけど終了したままにするケースがよく分からない
ま、何にしてもMouseGestureLが終了したらmouse.ahkの挙動が変わるのが嫌ということなら
MouseGestureLの方にmouse.ahkをIncludeさせればいいのでは?
それならMouseGestureL起動中しかmouse.ahkも動作しないわけだから
2020/11/06(金) 22:57:45.00ID:zxpauMpi0
>>559
自分もMGL使ってるけど同じahkスクリプトで常駐させたいものはMGLのプラグインにして
監視するのには「while」などのループじゃなく「settimer」使ってるな

プラグインにするのは別に薦めないけど、試しに「while」の代わりに「settimer」で監視してみては?
2020/11/07(土) 01:04:37.47ID:lXeAUpve0
マルチスレッド云々以前の問題な気が
まず、マウスの挙動を制御するプロセスス2つ同時に動かすことで干渉しあってる可能性は?
コントロールの奪い合いになってたりしない?

あとmouse.ahkの回し方に問題あると思う
20msの高頻度でMousemoveし続けて必ず時間どうりに動かすのがまず無理だし
ループ監視するよりHotkey、#if あたりで2ストロークイベントにしたほうがスムースに動くんではないか
2020/11/07(土) 19:11:05.17ID:/fD/cqh1d
https://i.imgur.com/H58BDRl.jpg
566名無しさん@お腹いっぱい。 (ワッチョイ b197-NW7M)
垢版 |
2020/11/10(火) 16:23:55.12ID:7m/sr7zP0
ループ間のディレイをなくす設定ってありますか?
Reloadで中断できるようにDllCallのSleepを小分けにしてループさせてたんですが
WindowsとAHKのアプデ後からループ10回で0.1秒ぐらいのディレイが入るようになりました
現状はこの設定です
#NoEnv
ListLines Off
Process, Priority, , H
SetBatchLines, -1
SetKeyDelay, -1, -1
SetMouseDelay, -1
SetDefaultMouseSpeed, 0
SetWinDelay, -1
SetControlDelay, -1
SendMode Input
2020/11/10(火) 20:20:11.56ID:iUPLlj4e0
>>566
実際のスクリプトを見ないと誰も答えられない
検証用に最小限まで削ってから貼ってください
2020/11/10(火) 21:17:47.40ID:Opml9bS20
winみたいなマルチタスクOSではアプリ層で割り込み禁止にできないし
AHK側の設定をどう変えてもノーディレイにはならない

けどsleepの精度を上げる方法はある模様
http://www.charatsoft.com/develop/otogema/page/02window/sleep.html

AHKで適用できるのか、できてもインタプリタなスプリクトでどこまで
シビアに時間制御ができるのかは知らんけど
569名無しさん@お腹いっぱい。 (ワッチョイ b197-NW7M)
垢版 |
2020/11/10(火) 21:18:03.46ID:7m/sr7zP0
>>567
上記の設定の後に

Sleep(Loops) {
Loop, %Loops%
DllCall("Sleep", "UInt", 50)
}

Shift::
Send, {Lbutton}
Sleep(20)
Send, {Lbutton}
Return

https://stopwatch.onl.jp
検証サイトはここです
Loop使わず直接1000ms指定だとディレイなし、Loopありだと+100~200ms,設定全削除だと+300~400msに増えました
2020/11/10(火) 21:55:37.89ID:Opml9bS20
A_TickCount を使おう
ループの中に組み込んで所定時間が過ぎてたらbreakするように組めば
sleepでの時間誤差は考慮しなくて良くなる
2020/11/11(水) 00:33:28.39ID:V+LIbDi40
>>569
↑のスクリプトで検証、ループであってもほぼ一致(+20〜30ms)ブラウザ経由の誤差だけ
他の負荷がかかってるのかも?タスクマネージャーで確認

念のため以下のスクリプトで検証してみてください。
通常は1ms程度の誤差しか出ないはずです。
https://pastebin.com/Rs3N47rb
572名無しさん@お腹いっぱい。 (ワッチョイ 1597-D0pj)
垢版 |
2020/11/13(金) 21:38:30.41ID:p37fZhSk0
>>571
セーフモードでの検証で
https://pastebin.com/JeZ4Y5kQ
AHK再インストール後でも同じでした
2020/11/15(日) 18:32:50.67ID:mZ0u8NFa0
低スペでもそんな現象にならんと思うし
AHK関係なくハードに何か問題が発生しているのでは?
2020/11/15(日) 19:12:31.38ID:mZ0u8NFa0
毎回sleep誤差15msってことは分解能の問題みたいですね
>>573は忘れてくださいw

精度を上げるサンプル(timeBeginPeriod)
https://www.autohotkey.com/docs/commands/Sleep.htm#ShorterSleep
575名無しさん@お腹いっぱい。 (ワッチョイ 1597-D0pj)
垢版 |
2020/11/15(日) 22:19:49.93ID:F94Ybu5B0
>>574
50ms200回で10125まで精度上がりました、ありがとうございます
2020/11/18(水) 02:47:53.44ID:jye7OlUl0
firefoxを83にアップデートしたらfirefox関係のスクリプトが動かなくなった。
調べてると返ってくるウインドウタイトルが
YouTube - Mozilla Firefox とかから
YouTube - Mozilla Firefox と真ん中の棒が変わってた。
このまぎらわしい棒は何だと調べたらem-dashとか言うらしい。
2020/11/18(水) 02:56:36.33ID:jye7OlUl0
すいません、>>576は間違えて同じもの2回貼り付けただけでした。
こっちが正しい比較です
YouTube - Mozilla Firefox (真ん中がハイフン)
YouTube ? Mozilla Firefox (真ん中がem-dash)
■ このスレッドは過去ログ倉庫に格納されています

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