AutoHotkey スレッド part25 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
1名無しさん@お腹いっぱい。 転載ダメ©2ch.net (ワッチョイ f977-fKjf)2017/09/14(木) 11:52:40.84ID:uijNj4qb0

■配布元
http://ahkscript.org/download/

■前スレ
AutoHotkey スレッド part24
http://egg.2ch.net/test/read.cgi/software/1487149472/

■日本語解説等
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: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)

今回のはガチ有能だから許してやるよ
これjtk超えたわ

そろそろウザイいわれる頃だと思いました
今の所目立つ不具合もないので開発はこれで終わりです。お騒がせしました

思ってても自重できないとかガイジかよ

お疲れ様でした

そんな〜
進捗知らせるリンクとかないの?

GitHubはいい選択肢だと思う
割とすごく便利に使ってるからこれで開発終了も勿体無い
これからなんか機能付け足すとかあるかも知れんからお願いします

うん、ブログかなんか作って、改良したらリンクだけでも貼っておいてくれると助かる。
文字通りのウェブログみたいなのでかまわないから。

あぁ、ギットハブでもいいね。

ギフハフにかんしされてる

お疲れ
たまにうpろだを覗いたらアップされてるくらいでも嬉しいから
よかったら続けてくれ

以下のようなサンプルスクリプトを書き、Excel上で
動いたのですが、他のウィンドウに切り替えても
動いたままです。アクティブ時以外は停止させる
ことはできないのでしょうか。

#IfWinActive ahk_class XLMAIN
^!down::
Interval :=2
Loop, 20
{
Send {enter}
Sleep, 1000*Interval
}
#IfWinActive

whileループ使えばよろし

#IfWinActiveはトリガー発動時の条件でしかない
アクティブ外れたからって実行中のスレッドを強制的に止めるような怖い機能はついてない

止めたいなら自分でloopの中でアクティブ切り替わったかどうか見てアボート処理入れないと
つうかhotkeyの中でsleep使うとキー連打したときにめんどくさくなるから
settimer使った方が安全だと思うけど

俺なら、SetTimer使って
if(WinActive("ahk_class XLMAIN")){
で実行させるかなぁ

loop内からif式でブレイクなんてのもある。まぁ好きなの使えばいいよ

みなさま、回答ありがとうございます
参考にさせてもらいます

要望があったのでJTKモドキの専用のブログ作りました。今後更新はこちらですることにします。
http://gamepadtokeybordframework.blogspot.jp/2018/04/gamepadtokeybord.html

ありがとうございます

>>968

おお、続けてくれるか!ありがとう!
XboxコントローラーでLRトリガー同時押しできるってだけでも相当助かってるので頑張って

トリガー同時押しなんてJTKでもずっと前から出来てるのに何言ってんだこいつ
やたら過度に称賛してる連中自演臭い

まぁ、ここよりもブログに応援コメントしてあげた方が良いだろうね。

分かってない質問者来たときに上から偉そうなのがワラワラ涌く以外勢いつかないスレなんだから
この程度の自作自慢ぐらいいちいち締め出すこともないだろうに
噛みつきたいだけのキチガイの言うことなんかほっとけよ

と、噛みつきたいだけのキチガイが吠えてます

A_OSVersionってWin8までしかサポートしてない?
Windows10であることを取得したい場合なんか方法ある?

MsgBox, %A_OSVersion%

で10.0.16299と表示されたけど

最新版インストーラから入れたら直った、ZIPだと本体が入ってないのな
スレ汚しすまん

zip版はAutoHotkeyA32.exe(ANSI 32bit)、AutoHotkeyU32.exe(UNICODE 32bit)、
AutoHotkeyU64.exe(UNICODE 64bit)が入ってるので自分の環境に合うやつを
AutoHotkey.exeにリネームなりコピーなりして使う

ポータブルマンセー厨だがahkは毎回インストーラ使って入れてるな
.ahkの関連付けされてないと不便だし

すみません初心者の質問です
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

>>981
普通にコンビネーションキーじゃダメなのか?

>>982
嫌です

>>981
そもそもIfとElseの使い方も滅茶苦茶
もう少し基本のサンプルコード良く見て基本中の基本を自力で理解した方が良い
そのスクリプト実行すると「a」を一回押しただけで「aa」が入力されるしな

>>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

まぁ、好みの問題だと思う。
俺は、
if(GetKeyState("sc03A","P")){
} else {
}
で書く方が好き。

動作仕様の説明なしでコードだけ貼られても意図した動作
(capsやスペース押下でどうしたいのか) そのものが他人にはわからんのだが

>>987
ほんとだよな
他人から見たらSpaceとaを押して「 A」(Aの前にSpaceが入る)になるのも本当に意図した通りなのか疑問だし

>>985
結局、Spaceキーはどうでも良かったわけね

>>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

続きはblogでやるからみんなみてね

過疎になるわけだ

>>985

> Ifで条件に一致したときに実行させて一致しない時にElseで分岐でいいのかな?
OK

> この場合だとわざわざIf state = U で押上状態を取得しなくていいの?
押上を待ちたかったり、押上た時になにかしたいのでなければいらない

> あと、ifは1行ならカッコで閉じなくていい?閉じるべき?
> 単一コマンドはElseの直後に絶対書くべき?
究極的には趣味の問題だけど、初心者のうちはifやelseの後は必ず{}にしといたほうが無難

それとスマートさを求めるなら、If分岐を整理するのもそうだけど
>>988が言ってるCapsLockやSpaceが入力されてるのをどうにかするのが先だと思う
どんなソフトで試してるのか知らないけど、余計なキー入力は誤動作の元だから
KeyWaitを使って横取りするか、コンビネーションキーを使うのが早い
コンビネーションキーが嫌なら、あえてその理由を解消する方向でスクリプトを考えてみるのが楽な場合もある

ただ、今の時点で期待通りに動いてるなら
下手にいじらないのもひとつの手
初心者の自覚があるならなおさら

>>990
Spaceとaを押したときにAの前にスペースが送られてるのも意図的にやってるのであれば

a::
GetKeyState, state, Space, P
If state = D
Send, +{A}
Else Send, a
Return

↑この6行と

~Space & a::Send, +a

の一行で動作は同じだろう
なぜコンビネーションキーではダメなのか知らんが
スマートに記述するならこっちの方がスマート

>>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がチラつくこともないです...

ただ、これが意図した動作だとしても書き方がおかしいようなら
もう少し考えます

ついでに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

>>983は何だったんだ

>>995はちょっと訂正
~sc03A & W::Send, ^!+{W}
~sc03A & S::Send, ^!+{S}
~sc03A & A::Send, ^!+{A}
~sc03A & D::Send, ^!+{D}

それで良いなら嫌ですとか言うなよ

CapsLockが送信されてるのは言われるまで送信されてるのがおかしいとは思っていなかったですが
とりあえず、状態を取得してもその後Ifでon,off出来なかったのでこんな事になってます
CapsLockがトリガーなら大丈夫なのですが、~LShift & sc03Aをトリガーにすると何故か動作しないので
CapsLockを送って処理してる次第です。

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

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。