AutoHotkey スレッド part25at SOFTWARE
AutoHotkey スレッド part25 - 暇つぶし2ch1000:名無しさん@お腹いっぱい。
18/04/21 22:34:11.35 fKXilc1u0.net
あぁ、ギットハブでもいいね。

1001:名無しさん@お腹いっぱい。
18/04/22 05:25:59.04 RQZNijO/0.net
ギフハフにかんしされてる

1002:名無しさん@お腹いっぱい。
18/04/22 09:58:25.53 KrMwycZF0.net
お疲れ
たまにうpろだを覗いたらアップされてるくらいでも嬉しいから
よかったら続けてくれ

1003:名無しさん@お腹いっぱい。
18/04/22 19:27:30.11 PW3IH2j00.net
以下のようなサンプルスクリプトを書き、Excel上で
動いたのですが、他のウィンドウに切り替えても
動いたままです。アクティブ時以外は停止させる
ことはできないのでしょうか。
#IfWinActive ahk_class XLMAIN
^!down::
Interval :=2
Loop, 20
{
Send {enter}
Sleep, 1000*Interval
}
#IfWinActive

1004:名無しさん@お腹いっぱい。
18/04/22 19:30:44.48 RQZNijO/0.net
whileループ使えばよろし

1005:名無しさん@お腹いっぱい。
18/04/22 22:10:37.71 +NuTjY0aM.net
#IfWinActiveはトリガー発動時の条件でしかない
アクティブ外れたからって実行中のスレッドを強制的に止めるような怖い機能はついてない
止めたいなら自分でloopの中でアクティブ切り替わったかどうか見てアボート処理入れないと
つうかhotkeyの中でsleep使うとキー連打したときにめんどくさくなるから
settimer使った方が安全だと思うけど

1006:名無しさん@お腹いっぱい。
18/04/22 22:12:00.47 Na2a3cix0.net
俺なら、SetTimer使って
if(WinActive("ahk_class XLMAIN")){
で実行させるかなぁ

1007:名無しさん@お腹いっぱい。
18/04/22 22:44:07.12 10Ec/CBsa.net
loop内からif式でブレイクなんてのもある。まぁ好きなの使えばいいよ

1008:名無しさん@お腹いっぱい。
18/04/23 08:25:10.44 O5Q2FlPe0.net
みなさま、回答ありがとうございます
参考にさせてもらいます

1009:名無しさん@お腹いっぱい。
18/04/23 17:57:46.27 AE7Q4/Eb0.net
要望があったのでJTKモドキの専用のブログ作りました。今後更新はこちらですることにします。
URLリンク(gamepadtokeybordframework.blogspot.jp)

1010:名無しさん@お腹いっぱい。
18/04/23 18:01:29.23 pzh5FeO50.net
ありがとうございます

1011:名無しさん@お腹いっぱい。
18/04/23 18:07:00.37 e3Qosisv0.net
>>968


1012:名無しさん@お腹いっぱい。
18/04/23 18:25:32.83 kj66dibia.net
おお、続けてくれるか!ありがとう!
XboxコントローラーでLRトリガー同時押しできるってだけでも相当助かってるので頑張って

1013:名無しさん@お腹いっぱい。
18/04/23 18:43:56.76 bXPE8uhS0.net
トリガー同時押しなんてJTKでもずっと前から出来てるのに何言ってんだこいつ
やたら過度に称賛してる連中自演臭い

1014:名無しさん@お腹いっぱい。
18/04/23 20:57:13.94 Gj6VP1R00.net
まぁ、ここよりもブログに応援コメントしてあげた方が良いだろうね。

1015:名無しさん@お腹いっぱい。
18/04/23 21:18:00.96 zWCv4IqX0.net
分かってない質問者来たときに上から偉そうなのがワラワラ涌く以外勢いつかないスレなんだから
この程度の自作自慢ぐらいいちいち締め出すこともないだろうに
噛みつきたいだけのキチガイの言うことなんかほっとけよ

1016:名無しさん@お腹いっぱい。
18/04/23 21:34:02.76 x5JIhAAO0.net
と、噛みつきたいだけのキチガイが吠えてます

1017:名無しさん@お腹いっぱい。
18/04/24 00:51:31.04 K1jVCB+q0.net
A_OSVersionってWin8までしかサポートしてない?
Windows10であることを取得したい場合なんか方法ある?

1018:名無しさん@お腹いっぱい。
18/04/24 00:57:28.67 HNWPsUWl0.net
MsgBox, %A_OSVersion%
で10.0.16299と表示されたけど

1019:名無しさん@お腹いっぱい。
18/04/24 01:01:20.02 K1jVCB+q0.net
最新版インストーラから入れたら直った、ZIPだと本体が入ってないのな
スレ汚しすまん

1020:名無しさん@お腹いっぱい。
18/04/24 21:47:10.94 w2d0xl7M0.net
zip版はAutoHotkeyA32.exe(ANSI 32bit)、AutoHotkeyU32.exe(UNICODE 32bit)、
AutoHotkeyU64.exe(UNICODE 64bit)が入ってるので自分の環境に合うやつを
AutoHotkey.exeにリネームなりコピーなりして使う

1021:名無しさん@お腹いっぱい。
18/04/25 02:45:11.77 C2JdtamLM.net
ポータブルマンセー厨だがahkは毎回インストーラ使って入れてるな
.ahkの関連付けされてないと


1022:不便だし



1023:名無しさん@お腹いっぱい。
18/04/25 05:12:42.53 TT/mbE+J0.net
すみません初心者の質問です
AキーをCapsLockとSpaceキーの押下状態での分岐ですが
Aキーを単押しの状態は最初のSend, aだけでいいのでしょうか
一応どちらでも動作するのですがもっとスマートに記述する場合どの様にするのがベストですか?
A::
GetKeyState, state, sc03A, P
If state = U
Send, a
Else
GetKeyState, state, sc03A, P
If state = D
Send, ^!+{A}
Else
GetKeyState, state, Space, P
If state = U
Send, a
Else
GetKeyState, state, Space, P
If state = D
Send, +{A}
Return

1024:名無しさん@お腹いっぱい。
18/04/25 05:35:11.89 pC9fkv9h0.net
>>981
普通にコンビネーションキーじゃダメなのか?

1025:名無しさん@お腹いっぱい。
18/04/25 06:20:19.60 TT/mbE+J0.net
>>982
嫌です

1026:名無しさん@お腹いっぱい。
18/04/25 06:27:05.95 RVBw9LmG0.net
>>981
そもそもIfとElseの使い方も滅茶苦茶
もう少し基本のサンプルコード良く見て基本中の基本を自力で理解した方が良い
そのスクリプト実行すると「a」を一回押しただけで「aa」が入力されるしな

1027:名無しさん@お腹いっぱい。
18/04/25 08:08:05.11 TT/mbE+J0.net
>>984
指摘されて気付いたけどaが2回押されてた
ソフト側でaキーでトグルされる設定がワンセットあったので気づかなかった
詳しくは割愛するが実際に動作に支障がない状態にあった
2つ目はとりあえず消すことで対処出来たけど
とりあえず、書き方がめちゃくちゃと言われたので
ひとまず単純に分岐を1つにして書き方を変えてみた
Ifで条件に一致したときに実行させて一致しない時にElseで分岐でいいのかな?
この場合だとわざわざIf state = U で押上状態を取得しなくていいの?
あと、ifは1行ならカッコで閉じなくていい?閉じるべき?
単一コマンドはElseの直後に絶対書くべき?
↓一応これで意図した動作はします
A::
GetKeyState, state, sc03A, P
If state = D
Send, ^!+{A}
Else Send, a
Return

1028:名無しさん@お腹いっぱい。
18/04/25 08:17:14.96 FDOLZigg0.net
まぁ、好みの問題だと思う。
俺は、
if(GetKeyState("sc03A","P")){
} else {
}
で書く方が好き。

1029:名無しさん@お腹いっぱい。
18/04/25 08:22:27.28 cS31dOM80.net
動作仕様の説明なしでコードだけ貼られても意図した動作
(capsやスペース押下でどうしたいのか) そのものが他人にはわからんのだが

1030:名無しさん@お腹いっぱい。
18/04/25 08:27:29.40 RVBw9LmG0.net
>>987
ほんとだよな
他人から見たらSpaceとaを押して「 A」(Aの前にSpaceが入る)になるのも本当に意図した通りなのか疑問だし

1031:名無しさん@お腹いっぱい。
18/04/25 08:29:03.76 FDOLZigg0.net
>>985
結局、Spaceキーはどうでも良かったわけね

1032:名無しさん@お腹いっぱい。
18/04/25 08:45:52.16 TT/mbE+J0.net
>>986
ありがとうございます
参考にします
985はひとまずって言ってるでしょ
>>987
>>988
CapsLock押下+aキーは Send, ^!+{A}
Space押下+aキーは Send, +{A}
aキーは aキー

で最初の質問での分岐はこうなった
これでaキーの単独押しをわざわざ条件から指定せず単純に分岐するだけでよくなった
A::
GetKeyState, state, sc03A, P
If state = D
{
Send, ^!+{A}
Return
}
GetKeyState, state, Space, P
If state = D
Send, +{A}
Else Send, a
Return

1033:名無しさん@お腹いっぱい。
18/04/25 08:57:54.27 Uuym80WnD.net
続きはblogでやるからみんなみてね

1034:名無しさん@お腹いっぱい。
18/04/25 09:05:46.23 2q8Y67NRa.net
過疎になるわけだ

1035:名無しさん@お腹いっぱい。
18/04/25 09:29:19.28 ehxQscQV0.net
>>985
> Ifで条件に一致したときに実行させて一致しない時にElseで分岐でいいのかな?
OK
> この場合だとわざわざIf state = U で押上状態を取得しなくていいの?
押上を待ちたかったり、押上た時になにかしたいのでなければいらない
> あと、ifは1行ならカッコで閉じなくていい?閉じるべき?
> 単一コマンドはElseの直後に絶対書くべき?
究極的には趣味の問題だけど、初心者のうちはifやelseの後は必ず{}にしといたほうが無難
それとスマートさを求めるなら、If分岐を整理するのもそうだけど
>>988が言ってるCapsLockやSpaceが入力されてるのをどうにかするのが先だと思う
どんなソフトで試してるのか知らないけど、余計なキー入力は誤動作の元だから
KeyWaitを使って横取りするか、コンビネーションキーを使うのが早い
コンビネーションキーが嫌なら、あえてその理由を解消する方向でスクリプトを考えてみるのが楽な場合もある
ただ、今の時点で期待通りに動いてるなら
下手にいじらないのもひとつの手
初心者の自覚があるならなおさら

1036:名無しさん@お腹いっぱい。
18/04/25 10:03:07.10 RVBw9LmG0.net
>>990
Spaceとaを押したときにAの前にスペースが送られてるのも意図的にやってるのであれば
a::
GetKeyState, state, Space, P
If state = D
Send, +{A}
Else Send, a
Return
↑この6行と
~Space & a::Send, +a
の一行で動作は同じだろう
なぜコンビネーションキーではダメなのか知らんが
スマートに記述するならこっちの方がスマート

1037:名無しさん@お腹いっぱい。
18/04/25 10:31:32.03 TT/mbE+J0.net
>>993
ありがとうございます
元々Photoshop等同系ソフトの共通コマンドを同じキーにするための
単なるリマップでしたが、複数のコードをひとまとめにしたかったのがきっかけですです
内容的には押しにくいキーを押しやすくしてるのものです
単純に押しやすいものでも操作の流れ上押しにくかったりするので。
ちなみに、左の小指をCapsLockに固定、親指をSpaceに固定が理想です
~Space & W::Send, +{W}
~Space & S::Send, +{S}
~Space & A::Send, +{A}
~Space & D::Send, +{D}
~sc03A & W::Send, +{W}
~sc03A & S::Send, +{S}
~sc03A & A::Send, +{A}
~sc03A & D::Send, +{D}
Spaceキーは以前単純にリマップしてたときより理想的な動作になってるのですが...
Spaceキー押しっぱなしで次に押したいSpace+◯が動作出来るようになったので
CapsLockはUSキーボードですが、Shift+CapsLockでON、OFF + 単推しでのOFFにしています
ただし、Photoshop等ではCapsLock単体はsc03A::Returnで無効化しています
一応、CapsLockが送信されてることは確認していますが
意図せずオンオフになったりLEDがチラつくこともないです...
ただ、これが意図した動作だとしても書き方がおかしいようなら
もう少し考えます

1038:名無しさん@お腹いっぱい。
18/04/25 10:43:10.93 TT/mbE+J0.net
ついでにCapsLockの動作のコードはこんな感じです
タイマーでもOFFになるようにしておりました
たぶんすごく不自然なことやってるんだと思いますがこれで意図した状態のことが出来てます
SetStoreCapslockMode, off
SetTimer, Timer05, 1000
;------------------------
~LShift & sc03A::
Send, {CapsLock}
Timer05:
If(A_TimeIdlePhysical>5000)
SetCapsLockState, OFF
Return
sc03A::
GetKeyState, state, CapsLock, T
If state = D
SetCapsLockState, OFF
GetKeyState, state, CapsLock, P
If state = U
SetCapsLockState, OFF
Return

1039:名無しさん@お腹いっぱい。
18/04/25 10:47:25.65 RVBw9LmG0.net
>>983は何だったんだ

1040:名無しさん@お腹いっぱい。
18/04/25 10:49:12.47 TT/mbE+J0.net
>>995はちょっと訂正
~sc03A & W::Send, ^!+{W}
~sc03A & S::Send, ^!+{S}
~sc03A & A::Send, ^!+{A}
~sc03A & D::Send, ^!+{D}

1041:名無しさん@お腹いっぱい。
18/04/25 10:56:10.09 YVL3wDrE0.net
それで良いなら嫌ですとか言うなよ

1042:名無しさん@お腹いっぱい。
18/04/25 10:59:43.24 TT/mbE+J0.net
CapsLockが送信されてるのは言われるまで送信されてるのがおかしいとは思っていなかったですが
とりあえず、状態を取得してもその後Ifでon,off出来なかったのでこんな事になってます
CapsLockがトリガーなら大丈夫なのですが、~LShift & sc03Aをトリガーにすると何故か動作しないので
CapsLockを送って処理してる次第です。

1043:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 222日 23時間 7分 3秒

1044:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch