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

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で間に合ってます

内部的にどうしてんのかは見てみたいからうぷっていいのよ

ブログとかにアップして、アドレス貼ってくれる方が読みやすいから好き。

アップしてみました
JTKまがいなジョイスティックの傾き入力をキーボードに変換するということをAutohotkeyでやりたいという人
興味があればどうぞ
https://ux.getuploader.com/autohotkeyl/download/125 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)

入力角度まで検出できんのか
ありがてえありがてえ
JTKより好みにキーコンフィグできそうだ

368名無しさん@お腹いっぱい。 (アウアウオーT Sa7f-0rpk)2017/11/12(日) 21:23:05.65ID:PxES/4Ifa
この設定ってAHKで実現できますかね..?
https://qiita.com/hakomo/items/a19eb4b08bc2b3aa1533
緑文字の「Ctrlキーと(SandSの)Shiftキーを押しながら」のところが実現できるのか...

JTKで出来るのになんでこんなもの作ったのかというと
JTKの特殊入力のアナログレベルによって切り替えるってところに不満があったから
多分、座標のXYの傾きだけで長方形判定してる。斜め入力時のときに誤操作が起きるって理由から
コッチは半径を求めてそれを目安にすることにした
それと内部的にキーおしっぱループの処理がわかってないのが怖い、連打してるかもしれないから
なので作った

370名無しさん@お腹いっぱい。 (ワッチョイ 5f87-p++X)2017/11/12(日) 21:28:02.68ID:PRQr2sD50
>>361
ありがとうございます。もう少し調べてみます。

https://ux.getuploader.com/autohotkeyl/download/126
>>366のものを二軸対応しました。ゲームパッドは二軸が主流でしたね。 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)

>>371
右スティックの軸はゲームパッドによってZ/Z回転だったり
X回転/Y回転だったりモデルによって異なるぞ

>>372
ああ、そうか、そうなっちゃうともうデバッグonにして動いてるパラメーターから同じ要領で変更してください。
関数化してもよかったか

そのうち角度計算、半径計算は関数化してもう少しシンプルに各軸設定出来るようにします。お待ち下さい

いや別に要らんけど

ジョイなんとかは自分とこだと暴発しておっかないから使うのやめたなあ

三角関数とか半径計算とか思いつかなかったしめんどくさいことを代わりにやってくれただけでも俺としては助かったか
これだけあれば無理にバージョンアップしなくてもええで
軸情報さえ与えればいいからな
GPDwin用に使わせてもらうわ

378名無しさん@お腹いっぱい。 (ワッチョイ 5f67-0ibl)2017/11/13(月) 01:55:06.59ID:9Yyb7OWG0
Menuで出すホップアップメニューがたまに外クリックしても消えなかったりするんだけど対策とかある?

>>378
対策は知らんけど、消す方法ならある

loop, 5 {
ifwinexist
break
winactivate, ahk_class #32768
send, {alt}
}

ifwinexist
じゃなくて
ifwinnotexist, ahk_class #32768

>>378
ポップアップメニュー表示中は、SetTimerの割り込みでさえ出来なくなるので、
ポップアップメニューを別AHKにして呼び出さないと、表示後の対策は何も出来ない。

使ってたフリーソフトがたびたび落ちるから、似たようなの自作して安定してたけど
元がmigemo対応してたんで、こっちにも組み込んでみたら落ちるようになったつらい

#usehook

^b::
send,^a
return


^a:: ;コピー
send,^c
return


^bでコピーのスクリプトを動かす方法ってないですか?Goto、Gosubは使わないで

何がしたいのかさっぱりわからん

この手の質問にあるあるだな
何をしたいのか具体的に書かずに、省略した謎コードを添削させるという

386名無しさん@お腹いっぱい。 (アウアウエーT Sa7f-yEAn)2017/11/13(月) 17:54:41.25ID:fTwFmDsma
なぜそうしたいのかなんて書く必要ねーからだろアホ

387名無しさん@お腹いっぱい。 (アウアウエーT Sa7f-yEAn)2017/11/13(月) 17:56:04.52ID:fTwFmDsma
質問に答えねーでケチつけるだけのゴミがでてくることこそあるある

クイズ問題だと思って答えれば良いってことだな。

^b::
^a::
send,^c
return

いやいやそこでクイズに答えてしまうと質問者は己のコードミスに気が付かないまま終わるで

send,^a はどこ行っちゃったんですかねぇ

ああ^cと^a間違えてるわけじゃなくてソフトウェアホットキー有効にしたいのね
#usehook外せばいいんじゃないすか

392383 (アウアウエーT Sa7f-yEAn)2017/11/13(月) 20:15:26.75ID:fTwFmDsma
>>389
すいませんその方法も使えないんです。
>>391
そうですソフトウエアホットキーを使いたいということです。
ですが#usehookや$がないと無限ループがおこるとかリスクがあるみたいなのでもう少し調べてなかったらあきらめます。
ありがとうございました。

無限ループ起こるのは

^a:: send,^a

とかやった場合だよ
A_ThisHotkeyと同じものをsendしたい場合だけ ラベルに$つければいいだけじゃね

ダメだ。マウスエミュレーションじゃゲーム上でカメラ動かないわ
何が条件なんだろう

3つを一度に比較ってできませんか?

space::
a:=10
b:=20
c:=30

z:=(a < c > b)
tooltip,%z%,600,800
return

そういう関数を作ればいい

ここ2,3か月前に同じような質問見たな
まああれは質問というか文句言いに来て恥かいただけだったが

and使うのが嫌ってこと?
まとめて一行で書く方法が分からないってこと?

だいぶ説明不足でしたすいません。
3つの数字は常に変動してて、ホットキー押したときにそのとき一番大きい値のを選択するってことがしたいです。
ifを沢山書けばできるけど一行でやる方法ないかなあと調べたのですが分からず。
一つ増えまして4つで比較ができればいいのですが。

z := (a >= b ? a : b) >= ( c >= d ? c : d ) ? (a >= b ? a : b) : ( c >= d ? c : d )

1行で書けるけど、1年後とかに見たら何をやってるのか分かり難いので
ifで書いといたほうが視認性はいいんじゃないかな

参考演算子使えばやれないこともないが素直にif書くほうが楽だと思うわ

おっとかぶった

可変長引数を取るmax関数でも定義すればいいじゃない

Max(params*) {
t := params[1]
Loop % params.MaxIndex() - 1 {
b := params[A_Index + 1]
t := t > b ? t : b
}
Return t
}

a := 10
b := 20
c := 30
d := 40
MsgBox % Max(a, b, c, d)
Return

>>403
これはすばらしい。 こんなこと出来たんだ

integer限定でよければこういう方法も

Max_integer(params*) {
o := object()
Loop % params.MaxIndex() {
o[params[a_index]] := true
}
Return, o.MaxIndex()
}

質問です

対話形式プログラムの自動化ってできるんでしょうか?
コマンドプロンプトに対してControlSendで送ることは出来ても
返答メッセージの読み取り方が分かりません。

407395 (アウアウエーT Sa0a-KWQn)2017/11/18(土) 17:29:00.55ID:9x5Xxm/fa
>>400
>>403
>>405
おー、すごい
できるようになりましたありがとうございました。
ahkを一年以上使ってるけどwiki読んだり検索して似たようなことやってる人のスクリプトを見てもわからなくてちょっと改変して移植もできない場合が多すぎて自分のポンコツぶりが悲しいw

>>406
uwscは doscmd で出来るけど、ahkでは試そうとしたこと無いので出来るかどうか解らない

>>406
大昔に無理やり実装してた人はいた、オリジナルANSI版の頃のだからたぶん今だと動かないと思うが
ここの プロセスを起動して標準出力を読み書き
http://lukewarm.s101.xrea.com/myscripts/

最近のだとこの辺とか?
AutoHotKey_Lで、標準出力を得る方法。
http://poimono.exblog.jp/22219786/

単純に出力見たいだけだったらファイルにリダイレクトしちゃうのが簡単だけど
(書き込み規制に引っかかるので全角化)
RunWait, cmd.exe /c es.exe 検索文字列>temp.tmp,,Hide /UseErrorLevel
FileRead,var,temp.tmp
msgbox,%var%

|clip

>>406
例えば rmdir を使ってフォルダとその中にあるファイルを削除する場合

app := ComObjCreate("WScript.Shell").Exec(ComSpec)
app.StdIn.WriteLine("rmdir /s D:\DeleteMe") ; D:\DeleteMe と DeleteMe フォルダの中にあるファイルを削除するコマンド
While (1) { ; DeleteMe フォルダの中に一つでもファイルやフォルダがないと無限ループするから注意
msg .= app.StdOut.Read(1) ; ReadLine だとこちらの入力待ちの時にデッドロックする
If (InStr(msg, "よろしいですか (Y/N)?")) {
MsgBox % msg
app.StdIn.WriteLine("Y") ; 確認を求められたので y を入力して削除を実行
break
}
}
app.StdIn.WriteLine("exit")
Return

こちらの入力待ちになるまでの処理は色々なやり方があると思う


413406 (HappyBirthday!WW 9209-xFaz)2017/11/20(月) 09:16:01.49ID:r9poHEzN0HAPPY
いろんなご意見ありがとうございます!

>>408
対話型には向いてなさそうな…

>>409
url一つ目のやつは試してみたけどahk_lだと動きませんでした
url二つ目のやつはout of memoryとでて、こっちもダメでした😭

>>411
これです!
なるほどこうやってCOMオブジェクトを使うんですね
すごい勉強になりました

>>412
原理的には411とほぼ一緒みたいですね
WINAPIはいまだにさっぱりよくわかりません

高速でControlSendを使うと
キーボードからの入力がたまにロックされて使えなくなってしまうことがあったので
COMオブジェクトで直接読み書きできるならそれにこしたことないですね

新着レスの表示
レスを投稿する