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

レス数が1000を超えています。これ以上書き込みはできません。
1名無しさん@お腹いっぱい。 転載ダメ©2ch.net (ワッチョイ 997d-+Qhn)2017/02/15(水) 18:04:32.01ID:kshCKhXn0
!extend:checked:vvvvv:1000:512と次スレを立てる際は1行目に記入してください

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

■前スレ
AutoHotkey スレッド part23
http://potato.2ch.net/test/read.cgi/software/1470936221/

■日本語解説等
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)

952名無しさん@お腹いっぱい。 (ワッチョイ 3e67-xkdj)2017/09/10(日) 05:56:51.93ID:Gp5DYXYz0
MButton::
if(clickEnable = true)
clickEnable := false
if(clickEnable = false)
clickEnable := true
loop{
click
sleep 250
if(clickEnable = false){
break
}
}
return

ミドルキーを押すと連打、もう一度押すと連打解除のスクリプトを作りたくて組んだのですが、
連打解除が出来ない状態です。
どなたかアドバイスをお願いします。

ループ内sleepでMbuttonイベント内部に留まり続けてるせいで
次の押下があっても割り込み発生しないのでは
timer発生させてMbuttonはreturnですぐ抜ける
連打処理はtimerのなかでやる

他にも、

書いてないだけかもしれないが
フラグ変数の初期値がないからどのifも偽にしかならない

さらに、ちゃんと値入れたとしてもそれ何度押しても絶対trueになる

本当だ
elseifじゃないから2回if通ってるわ

ちょっと確認してみます。
アドバイスありがとうございました。

clickEnable := false

MButton::
if(clickEnable = true)
clickEnable := false
else if(clickEnable = false)
clickEnable := true
loop{
SetTimer, click , 250
if(clickEnable = false){
break
}
}
return

すいません。
やはり動きませんでした。
更に助言を頂ければ幸いです・・・。

放っとけ と音の近いホットキーを並べて発音し、面白さ表現を狙っています

SetTimerのヘルプちゃんと読んで

sleep置換じゃなくてloop内全部を別スレッドで起動させる
まずいのは永久loop状態でMButtonから出られないことだから

960名無しさん@お腹いっぱい。 (ワッチョイ 0b87-x/0H)2017/09/10(日) 09:46:26.55ID:HxrW5Xht0
最近やり始めた。

ファイルがあればおkとか初めの?にも書いてあるし
ネットの入門ページにもEXEダブルクリックでおkとか書いてあるのに
結局ファイル取らせないと起動しない上
?ページの英語頑張ってよみつつ検索してもencordでマッチしないし
webページはバージョン違いで参考にならないから
コンテキストメニューからの生成で8Bってわかって変えてやりかたかった
win+Tへのリマップいきなりできたからイイけど

そもそも同じ場所に3つもEXEあるしソレゾレの説明が無い。
まぁこのスレの説明から恐らくU32がオススメなんだとは思うが
沢山あるネット入門ページが変なのは今までの歴史の重積のセイだと思うんだけど、
コレじゃ新規ゆとりんには流行らんわコレ

あまりに案内がメチャクチャ過ぎる

>>960
ほんとそれ

> ファイルがあればおkとか初めの?にも書いてあるし
> ネットの入門ページにもEXEダブルクリックでおkとか書いてあるのに
> 結局ファイル取らせないと起動しない上

EXEファイルと同じ名前のAHKファイルを起動するだけならEXEダブクリでおk

> そもそも同じ場所に3つもEXEあるしソレゾレの説明が無い。
> まぁこのスレの説明から恐らくU32がオススメなんだとは思うが

A32→Ansi/32bit版、U32→Unicode/32bit版、U64→Unicode/64bit版
PCが32bitなら32bit版、64bitなら64bit版
基本はUnicode版推奨だけど、一部の古いスクリプトを動かしたいだけならAnsi版が都合のいい時があったりなかったり

> 沢山あるネット入門ページが変なのは今までの歴史の重積のセイだと思うんだけど、
> コレじゃ新規ゆとりんには流行らんわコレ

Unicode版の登場と、最近A32・U32・U64が同じパックで配布されるようになって入門のあたりはだいぶ信用できなくなってるけど
それ以外は昔の記事でも役に立つから…(震え声)

むかし流行らせた本人はもう流行らせたくないつってサイト閉めちゃったからねぇ
正直>960が何言ってるのかよくわからんが AHK分かりにくいよ何参考にしたらいいんだよ ってこと?

アプデ追従常時最新じゃないにしろ AutoHotkey Wikiなら情報古すぎて役に立たないってことはない
AHK v2についてはα版だし解説も少ないので初心者がいきなり手を出さないほうがいい

>>952>>957
勘違いだったら悪いけど、スクリプトがどういう順番で動いているかの理解がいろいろ間違ってる

@最初にミドルを押すとMButton::ラベルが実行されるけど、もう一度ミドルを押したときは実行されない(正確にはスレッドの割り込みが行われない。詳しくはThreadとか)
Aループ中にclickEnableをfalseにする処理がないから、一度目のループが永遠にbreakしない(動かないように見えるだけで、実際はずっと必死にループしてる)
BSetTimerは別にラベルが必要

やり方としては、一度のMButton::ラベルの中だけで全部終わらせるようにする
具体的にはloopの中に、2回目のミドルクリックをkeywaitかinputとかgetkeystateとかで感知してbreakする処理を入れてやる
keywaitおすすめ

>>963
ありがとうございます。
まだ動かないのですが、今はこんな感じで調整してみました。

MButton::
loop{
click
sleep 250
keywait , MButton , D
break
}
return

>>964
横槍だけどLoop使わないでSetTimerでクリックを繰り返せばって話じゃないの?
あとはMButton押すたびにSetTimerをオンオフ切り替えれば良いだけかと

キーボードだったらキーリピート発生するから>893みたいな例でKeyWaitやGetKeyState使えるけど
マウスの場合 Send, {Lbuton Down}してもクリック連打にはならないので
MButton::スレッド内で完結させるのは難しい

KeyWait中はクリック連打させられないしGetKeyStateでBreakしちゃったら
その後の再押下までやっぱりクリック連打されない
Loopは諦めて素直にSetTimerにしたほうがいい

mbutton::
keywait,mbutton
loop{
click
keywait,mbutton,d t0.25
if !errorlevel
break
}
return

>>954
俺の書き方が悪かった、その調整で大体あってるけどそれだと
ループに入った後に次のミドルクリックをひたすら待って2回目のミドルクリックでbreakしてるか
あるいは1回目のミドルクリックが離される前にkeywaitの判定に入っちゃって即座にbreakしてる
どちらにしろループの1回目でbreakしてるから連打できてない

>>967の人ので動いてくれると思う
クリック

ミドルクリックが押されるのを待つ、ただし250ミリ秒たったらタイムアウト(sleepの行の節約にもなる)

タイムアウトしなかったら(errorlevelが0なら)、つまり2回目のミドルクリックされたらbreak
タイムアウトしたら(errorlevelが1なら)次のループへ

ループの前のkeywaitは、1回目のミドルクリックが離されるのが遅くて即座にbreakしてしまうのを防ぐ保険だと思う

あと最初に言えばよかったんだけどlistlinesかタスクトレイメニューのOpenでスクリプトの流れが見えるから
今回くらいの短さのやつならそっちを確認しながらやるといろいろ捗る

せっかくだからタイマー使うやり方も
スレッドが2つになるのがあんまり好みじゃないけど、こっちの方が最初に希望してた動作に近いかな?

MButton::
clickEnable := clickEnable ? false : true
if(clickEnable = true)
settimer, clicktimer, 250
else if(clickEnable = false)
settimer, clicktimer, Off
return

clicktimer:
click
return

>>964
全く検証してないのだが・・・・・
サンプルコード集 - AutoHotkey Wiki
http://ahkwiki.net/SampleCodes#.E3.82.AD.E3.83.BC.E9.80.A3.E5.B0.84.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88
の「キー連射スクリプト」では動かない?

皆さんありがとうございました。
settimerはユーザー定義関数だったんですね・・・。
色々と勉強になりました。

ありがとうございました。

972名無しさん@お腹いっぱい。 (ワッチョイ ff77-WPj4)2017/09/11(月) 12:47:39.81ID:rdkmRnoo0
>>961
今から始めるなら基本はU32版。
これなら普通に使っている限り、Windowsが32bitでも64bitでもきちんと動いてくれる。
U64版は64bit版のWindowsにしかない機能を使うときのためのもの。
A32版はWindows95/98/Me/NT4をまだ使っている人と、
その時代のスクリプトを手直しせずに使いたい人のためのもの。

ちなみに俺の場合、64bitマシンのProgram Filesには素直に64bit版を入れているけど、
Ahk2ExeでコンパイルするときはA32・U32・U64 を3つとも作るようにしている。
…で、ほとんどの場合は持込先が64bit OSでもU32のEXEファイルだけで事足りている。
今のところ、Win64のDLLを使うとか、よほど巨大なデータを扱うとかしない限り、
「迷ったらU32版」で何も問題ないと思うよ。

AHKの書籍あったらいいのになあ
寝る前とかにパラパラ読めたらさぞよかろうに

>>972
普通にインストーラーからインストールした場合64bitOSだとU64版が「AutoHotkey.exe」になって
ahkファイルもそこに関連付けされるけどU64版で何も困ったことは無いな

>>971
settimerはコマンドで、settimerのパラメータにユーザー定義ラベルを指定する必要があって
ユーザー定義ラベルの代わりにユーザー定義関数が最近使えるようになった、てのが正確なところだけど…
まあ当初の目的が達成できたならよかったよ

>>975
達成も何も、ゆとりの教えたがりがスクリプト丸々張っただけだがな

>>964まで辿り着いたんだから十分だろう

何回教えてもダメな子にはもう面倒だから丸ごとスプリクト与えちまえみたいな
前例作っちゃったのは良くないがな

ここはそんなに教育的な場なの?
質問者のネタ提供に対して、回答者達があれこれ楽しくスクリプト例を出し合うのも良いんじゃないかな。

時間をかけてAutoHotkeyマスターになったところで一銭にもならないしな・・・

ここんとこ解答者の言わんとしてることをあまり理解しようとしないで
こうですか?わかりません!
をくり返す質問が増えたなあ、としみじみ思う
同一人物なのかも知れんけど

ループの最後にbreakされたらさすがに教えるほうの心は折れるわ

すみません質問いいでしょうか?
何枚か重なったウィンドウで1番裏にあるウィンドウをアクティブにするコードなんですが
グループを指定しなくても出来ますか?
特に指定や除外条件が無いので簡単に最裏を指定したいです。

;Auto-execute Section
;〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
GroupAdd, UraWindow, ahk_exe firefox.exe
GroupAdd, UraWindow, ahk_class WindowsForms10.Window.8.app.0.141b42a_r14_ad1
GroupAdd, UraWindow, ahk_class MontBlancApp_mtvGuide
Return
;〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
#x::
WinActivateBottom, ahk_group UraWindow
Return

Shift+Alt+Tab

groupadd, ALL, ^(?!Program Manager$)

Windows7だと
Send,+!{Tab 2}

wikiやヘルプだと
>WinActivateBottom [, WinTitle, WinText, ExcludeTitle, ExcludeText]
てなってるけど
タイトル省略して WinActivateBottom だけにするとエラーになるな

v1.1.24.00

条件分岐ifだけか
switchっぽいの便利だと思うんだが何がダメなんだろ
吉里吉里とかでもif組み合わせるのメンド臭かったわ

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --app=https://translate.google.com/?hl=ja

起動してクリップボードに変更があったら^a^vするマクロ組んだら
リアルタイム翻訳ツールになってめっちゃ便利だ

990983 (ワッチョイ 5a87-HP8N)2017/09/13(水) 03:27:48.82ID:fOGI8mDI0
無理みたいですね
+!{tab}は使えませんでした
私の環境だとAlt+Tabはモニタ毎にそれぞれで起動してるタスクを表示させてるので
全体のタスクから拾えないんです
どのみち最少化してるのまで含んでしまうし駄目ですけどね

試行錯誤しながらクラス名書き出してたらとりあえずいっぱいになったので
このまま突き進みます

ありがとうございました。

>>990
AHK使ってないので見当違いかもしれませんが除外にありえない文字列
WinActivateBottom,,,aaaaaaaaaaaaaaaaaa
とかわ

>>990
DllCallでGetWindow関数を使えば、
最裏(つまりデスクトップの一つ上)のウィンドウを取得することができるかもしれない
申し訳ないがDllCallに詳しくない自分のテストではデスクトップを取得するだけに至り、その上のウィンドウ取得ができなかった
しかしGetWindowはアプローチとしては良いと思ったので提案

ただの発想なので欠陥だらけかも…
それに、うまく行ったとしてもタイムラグ激しそう

-------------------------
WinGet, OutputVar, list
で存在する全てのウィンドウを列挙し、(loopで回すのが賢い)
GroupAdd, UraWindow, ahk_id OutputVar1
GroupAdd, UraWindow, ahk_id OutputVar2
      ・
      ・
で取得した全ウインドウハンドルを次々にグループに登録し、
WinActivateBottom, ahk_group UraWindow
で実行
-------------------------

例えばこのスクリプト↑を「a.ahk」とし、

-------------------------
#x::
run, a.ahk
Return
-------------------------

という「b.ahk」スクリプト↑を常駐させる

>>993>>990へのレス
そして訂正
>で存在する全てのウィンドウを列挙し、(loopで回すのが賢い)
の(loopで回すのが賢い)は、間違い
正しくは↓
で取得した全ウインドウハンドルを次々にグループに登録し(loopで回すのが賢い)、

ですた、スマンOTZ

そんなことしなくてもその擬似配列の一番最後が最後面だよ

Zオーダー順だしな

997名無しさん@お腹いっぱい。 (ワッチョイ c977-fKjf)2017/09/14(木) 12:08:58.65ID:uijNj4qb0
次スレです。

AutoHotkey スレッド part25
http://egg.2ch.net/test/read.cgi/software/1505357560/

連投規制でテンプレを最後まで貼れなかったので、誰かヨロ。

998名無しさん@お腹いっぱい。 (ワッチョイ c977-fKjf)2017/09/14(木) 12:12:14.96ID:uijNj4qb0
あ、しまった、いま気付いたけど、
「!extend:checked:vvvvv:1000:512と次スレを立てる際は1行目に記入してください」
>>1の頭に2回書かないといけないのか。
最近の2chは色々と難しいなあ…。

二回連続でええの?
なんか回避文字があるのかと !! みたいな

有効になるのは一行目のみだからそのままでいい

10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
SLOT Results
🎰🎰🎰 Excellent!! 0
🎴🎴🎴 Gratz!! 0
🌸🌸🌸 OPPAI Ban!! 0
💣💣💣 Backingum!! 0
Win!! 1
Points 7 pts.

life time: 210日 18時間 27分 44秒

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


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

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

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

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

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