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

レス数が950を超えています。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)
2017/08/28(月) 16:03:28.15ID:xugByVWN0
嫌みの本人来たw
2017/08/28(月) 16:27:07.52ID:10My9WrV0
来たな、元凶!


あっ、言ってみたかっただけです
2017/08/28(月) 22:21:14.23ID:OD5GMrv+0
>>873-874
他にはボタンのスクショを予め撮って置き、それをImageSearchで捜す
あとは、例えばボタン文字列が「開く(O)」みたいになってたら、send,!oでも行けそう
もっと有るかもしれないけど↑以外自分は分からない

そもそも何で座標を指定するやり方が嫌なのか分からないが、
もし、該当のボタン含むウインドウが表示する度に場所が変わるってことなら、
CoordMode, Mouse, Window で基準をウインドウ左上の角にすれば良いだけだと思うが・・・
でも、ボタンの位置がコロコロ変わるってんなら話は別で、やっぱ上記のやり方かなー
2017/08/29(火) 16:39:55.54ID:bNioMEw20NIKU
英語キーボードなんですが左altに無変換を同時に割り当てることってできます?
左altを無変換に割り当てたところalt+f4で閉じるが使えなくなったので
できれば慣れてるやり方で使えればと思いまして
2017/08/29(火) 16:46:51.10ID:vRGZZZoh0NIKU
>英語キーボード
無変換の付いていない欠陥キーボードを窓から投げ捨てるのが一番手っ取り早い
2017/08/29(火) 16:55:45.51ID:3SEZMKvw0NIKU
>>885
まず、レジストリ系のキー変更アプリで、左alt を f13 キーにしておく。
そして、↓のように書けば良いんじゃないかな。

f13 & f4::Send,!{f4}
f13::Send,{sc07B}

装飾キーはそのまま使うとたまに誤動作するから。
2017/08/29(火) 17:12:07.82ID:nMMgk/VH0NIKU
alt+F4の他にもaltキーなんて多用するんだからそもそも左altを無変換にすること自体が無謀だがな
2017/08/29(火) 23:30:14.64ID:XjnV7ZAC0NIKU
おると無いとじゃ大違いだな
2017/08/29(火) 23:32:02.93ID:WMN3B7FI0NIKU
>>889
2017/08/30(水) 00:23:37.63ID:bk6DEqje0
>>886
ノートなんで

>>887
やってみます。ありがとうございます
2017/08/30(水) 19:05:32.60ID:Y5VP/KUn0
わざわざPCを不便にするためにAHK使う人もいるんだな
893名無しさん@お腹いっぱい。 (ワッチョイ c33e-k/3h)
垢版 |
2017/09/01(金) 01:07:37.82ID:0PMQPHaA0
QorEを押したらもう一度押すまでおしっぱにされているスクリプトを見つけたんですが
シフトを押した場合おしっぱを解除したいんですが下記にどのようなコードを追加すればいいでしょうか?

https://autohotkey.com/boards/viewtopic.php?f=19&;t=32339
2017/09/01(金) 01:25:00.88ID:tkL4AVuH0
keywaitの代わりにloop+getkeystate
追加というより書き直しになるんじゃね
2017/09/01(金) 17:38:06.89ID:1G41JveX0
ahk 64bit unicode版 / windows10

UTF-8で保存すると文字列の閉じquoteの手前が「し」で終わるとエラーになります。
aaa := "かかし"

UTF-16だと無問題
これはバグですよね??
2017/09/01(金) 17:42:12.36ID:fnuLWJDb0
BOM
897名無しさん@お腹いっぱい。 (ワッチョイ cf01-k/3h)
垢版 |
2017/09/01(金) 20:22:06.32ID:1G41JveX0
たいへん勉強になりました!!
2017/09/01(金) 20:31:35.49ID:I8hn/M9fa
ボムボムボムボムボム
2017/09/01(金) 23:33:20.30ID:7d7CJrk/0
指定時間に実行するタイマーを作りたいのですが、
ミリ秒を取得することはできますか?
2017/09/02(土) 00:35:16.28ID:UtftmLsW0
A_MSec
901名無しさん@お腹いっぱい。 (ワッチョイ a3ec-k/3h)
垢版 |
2017/09/02(土) 13:27:53.00ID:medBOmhe0
多分簡単な内容かも知れませんが宜しくお願いします。

SPLASHとかてにWINSET等の方法又は 最前面に固定したアプリ又は画像ウィンドウの領域を反応させないで
表示させたまま下のウィンドウの操作をしたいのですが組み方としてはどうすれば良いんでしょう?
WinSet, AlwaysOnTop 等では画像分のアクティブになってしまうようでして。
2017/09/02(土) 19:26:50.64ID:PxYybRRg0
>>901
透過ウィンドウのことだね

Gui, Add, Edit, h500 w500
Gui, Show, NA, TEST
WinSet, Transparent, 50, TEST

Gui, +AlwaysOnTop +E0x00000020
; WinSet, AlwaysOnTop, On, TEST ; 最前面
; WinSet, ExStyle, +0x00000020, TEST ; WS_EX_TRANSPARENT(透過ウィンドウ)
return
903名無しさん@お腹いっぱい。 (ワッチョイ a3ec-k/3h)
垢版 |
2017/09/03(日) 07:58:15.02ID:tPQnacaR0
>>902

あーーー!!!
コレです!
これだけわかればもうOKです。
有難うございます。こう指定すればよかったのですか…勉強になりました。
2017/09/03(日) 12:00:10.75ID:ptt8omPg0
>>900
ありがとうございます。
2017/09/04(月) 00:16:19.30ID:bG9ijaw10
すみません質問いいでしょうか

やりたいのは アクティブなら最少化、非アクティブならアクティブに、起動してないなら起動です
他のプログラムではうまくいくのですがExplorer(ブラウザじゃない方)が起動しないです
" Run,C:\Windows\explorer.exe"以外の書き方ってありますか?
windows7です。よろしくお願いします

#E::
Process, Exist, explorer.exe
If (ErrorLevel <> 0)
{
IfWinActive, ahk_class CabinetWClass
{
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
}
Else
{
WinActivate, ahk_class CabinetWClass
}
}
Else
{
Run,C:\Windows\explorer.exe
}
Return
2017/09/04(月) 00:35:39.77ID:iAwmkG+w0
エクスプローラのクラスはCabinetWClassの他に
ExploreWClass というのも(XPの頃は)あった
win10とか最近のOSはわからんけど
上手く行かないエクスプローラのクラスを調べなおしてみては
2017/09/04(月) 00:36:52.29ID:3LMD3eG30
ウインドウを1つも開いてなくてもexplorer.exeは常に起動しているものだけどそこを勘違いしてる?
2017/09/04(月) 00:41:01.95ID:3rOlLvxm0
>>905
>Process, Exist, explorer.exe
>If (ErrorLevel <> 0)
だとどうやっても"Run,C:\Windows\explorer.exe"の行にはいかなかったので
IfWinExist , ahk_class CabinetWClass
にしたら動いたよ
2017/09/04(月) 00:52:29.54ID:IxgPkgxk0
ところで話は逸れますがElseって書く必要あるんですか?
if{}で囲ったらElseって書いても省略しても挙動は変わらないですよね?
それとも何か違いがあるんでしょうか?
2017/09/04(月) 01:21:30.87ID:uWvF+T/50
>>909
必要ないなら書かないでいい
2017/09/04(月) 01:30:07.16ID:IxgPkgxk0
>>910
やっぱりそうなんですね
ありがとうございます
2017/09/04(月) 01:30:28.79ID:iAwmkG+w0
elseはifじゃないときの処理を書く
ifの時にはしたくない処理をelseに入れる

例)
Aが1の時は"OK"と表示する   (if)
そうじゃない時は"NG"と表示する(else)
2017/09/04(月) 01:44:37.19ID:IxgPkgxk0
>>912
はい
でも{}で囲ったらElse無くても同じ意味ですよね
{}の外は"そうじゃない時"になるので
2017/09/04(月) 02:03:30.48ID:3LMD3eG30
全然違う
自分でいろいろ試してみりゃいいよ
2017/09/04(月) 02:19:59.45ID:Po3eqTp10
俺なんかelse ifで12分岐してるで
自慢にもなりゃしないけど
2017/09/04(月) 02:20:31.48ID:iAwmkG+w0
{ }の外はもうifに支配されないので
そうでもそうじゃなくても実行される
{ }の中にreturnやgoto突っ込んで強制的に行き先変えてる場合は別だが
2017/09/04(月) 02:21:40.56ID:bG9ijaw10
>>907
失念してました
>>908
ありがとうございます解決できました
プロセスが常に起動してることを失念してたのが原因ですかね
プロセスじゃなくウィンドウが存在するかどうかで処理すればよかったのですね

>>909
ご指摘どうもです
上のElse 1つ余計で要らなかったですかね?

#E::
IfWinExist, ahk_class CabinetWClass
{
IfWinActive, ahk_class CabinetWClass
{
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
}
{
WinActivate, ahk_class CabinetWClass
}
}
Else
{
Run,C:\Windows\explorer.exe
}
Return
2017/09/04(月) 02:43:00.93ID:IxgPkgxk0
>>914-916
ああ、なるほど
Returnを書いてない場合はElseが必要になるんですね
自分はいつもReturn付けてたので複数分岐してもElseは全く使っていませんでした
2017/09/04(月) 02:49:11.33ID:IxgPkgxk0
>>917
Elseを使わない場合はこうですね

#E::
IfWinExist, ahk_class CabinetWClass
{
IfWinActive, ahk_class CabinetWClass
{
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
Return
}
WinActivate, ahk_class CabinetWClass
Return
}
Run,C:\Windows\explorer.exe
Return

書き方の違いだけでElse使っても同じ動作させられるので好みだと思いますが
2017/09/04(月) 03:23:11.88ID:bG9ijaw10
>>919
なるほど Returnを使うのですね
でもやっぱりElseがある方が条件分岐してるというのが分かりやすいかな
Elseを"そうでない場合は..."という感じで使ってるので。
2017/09/04(月) 07:35:31.57ID:iAwmkG+w0
>>919
うーん…
それ己が好きで使う分にはいいかも知れんけど人に薦めないほうがいいような
出口をむやみに増やす書き方は好みと呼ぶには変態すぎる
多重loopの深い階層から一気にアボートしたい場合時は自分も中途return使うけど基本的に変則処理だから

>>917
そこのelseは必要
行数減らしたいなら1行しか処理内容がない場合の{ }は省略可能

#E::
  IfWinExist, ahk_class CabinetWClass
  {
    IfWinActive, ahk_class CabinetWClass
      PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
    (else)
      WinActivate, ahk_class CabinetWClass
  }
  Else
    Run,C:\Windows\explorer.exe
Return
2017/09/04(月) 12:52:51.87ID:s4P5aKg20
>>921
別に人に薦めてるわけじゃないですよ
ただ初心者向けのwikiのサンプルコード集とかも{}の中にReturnを付けてElseを使わない書き方が
多かったので、たまたま自分はそれに慣れてしまったというだけですので
完全に独学なので何が変則とか分からないですしね
2017/09/04(月) 13:35:08.09ID:dTIS4lCH0
>>919のコードも変則でも変態でもない
好きなように書けば良いんやで
2017/09/04(月) 14:07:18.50ID:9j+nU6QO0
マウスのサイドボタン+ホイール上下で
firefoxのyoutubeの音量を調整するために下記のように設定したのですが

;Firefox音量調整
#IfWinActive ahk_class MozillaWindowClass
xbutton1::Send,^w
xbutton1 & WheelUp::send,{Up}
xbutton1 & WheelDown::send,{Down}
#IfWinActive

初めのうちは問題なく動作するのですがしばらくすると音量の上げ下げを受け付けなくなります
その際も xbutton1::Send,^w の方は受け付けています
その後、Reload This Script すると再び動作しますがしばらくするとまた
マウスの2ボタンを使ったスクリプトは受け付けなくなります

firefoxの問題かとも思ったのですがIEでも同じ挙動になります
どうすれば安定して動作するでしょうか?
2017/09/04(月) 21:10:41.98ID:8+O37YES0
>>924
参考になるか分からんけど、自分もwheel操作にキーを送るスクリプト(>>819と同等の)使ってるが、
以前、「マウス関数群 (MUS.ahk)」ていう関数を使う別のホットキーのコードも併記していたら同じようになった
でも、MUS.ahk使うコードが不要になり、この関数を使わなくなったら以降同現象は発生しなくなった

※MUS.ahkが悪さしてたというより自分の書き方が悪かったのかもしれないので念のため
2017/09/04(月) 21:44:55.04ID:25LQ8mxi0
質問とは関係ないけど、うっかり閉じそうなキー設定だな
2017/09/04(月) 22:11:00.76ID:9j+nU6QO0
>>925
ありがとう
自分は他のスクリプトは併用していないし念のため32ビットと64ビット両バージョンで試したけど
だめだった
仕様だと思って諦めます

>>926
そうなのよ、急に ^w だけ認識するようになって音量調整しようとしたらてタブが閉じるようになった
2017/09/04(月) 23:58:21.70ID:8+O37YES0
今頃気づいた
自分使ってないので分からないが、firefoxってホイールクリックでタブ閉じないのかな?
ホイールクリックでタブ閉じする方が誤爆率低そうなんだが…
そうすればxbutton1は別用途で使えるようになるから良いと思うがな

スレ違いand大きなお世話ですまん
2017/09/05(火) 00:18:15.64ID:BAbZefjZ0
うちのfirefoxはタブ閉じるよ
マウス、タブ操作関係のアドオンは入れてない
Debian sid 64bit / Firefox 55.0.2
あとMozzilaのホームページでもそう説明されてる
2017/09/05(火) 05:37:53.31ID:188LMfmV0
>>928
ホイールクリックでも閉じるけどタブのとこまでカーソル持って行かずにボタン一つで
連打してがしがしタブを閉じたいので ctrl+w をサイドボタンに当ててます
2017/09/05(火) 07:17:32.23ID:iCCxh9rp0
モディファイアキー単独押しに、誤発動したら困る機能を割り当てるのは、自分ならやらないなぁ。
2017/09/05(火) 08:05:49.75ID:ZIXYq/GW0
そっスか
2017/09/05(火) 08:33:17.45ID:9v2IhtwaM
マウス動かさずガシガシ閉じたいときは左手でctrl+w連打してるな
寝PCなんかでキーボード触りたくない時はマウスだが
2017/09/05(火) 11:01:09.15ID:zdILsO1y0
マウスに削除機能や閉じる機能を割り当てると
誤爆した時めっちゃ面倒だから割り当てない。
2017/09/05(火) 11:51:00.61ID:RQRJN7rO0
wikiのサンプルコード集 - 1つのキーに3種類以上の動作割り当て
どうしてもxbutton1に拘りたいなら、これでxbutton1のダブルクリックに^w割り当てれば誤爆減るかもね。
あとは、ホイールクリックに^w割り当てる手もある。(パンて言うのかオートスクロールって言うのかの機能殺すだろうけど)

firefoxの機能に「このタブより右(左)を全て閉じる」みたいな機能(拡張)あるならそれ使えば良いのに、、、とも思う。
2017/09/05(火) 13:32:39.30ID:188LMfmV0
>>935
「このタブより右(左)を全て閉じる」も使ってるけどだいたい10から20くらいのタブの間を
行ったり来たりするから細かく素早くタブを消したいのよ
誤爆してタブ消すことあるけど拡張のマウスジェスチャーで 右ボタン→← を
ctrl+shift+T に割り当ててるから一瞬でタブ復活できて読んでたページのスクロール位置も記憶してて
そこまで戻ってくれるから自分にはサイドボタンを ctrl+w に割り振るのが1番使いやすいです
2017/09/05(火) 13:49:54.73ID:jv4vUIP4X
マウスが壊れると一気に不便になるから
サイドボタンには頼らなくなった
2017/09/05(火) 14:42:48.54ID:188LMfmV0
>>937
自分の使ってるのはエレコムの安い2000円くらいの5ボタンマウスだけど
壊れて他の使うと手になじむまで結構かかるからまとめて同じの10個くらい買ってる
1個の寿命がだいたい3年くらいもつのでたぶん自分が呆けるか死ぬかUSBの規格が
終わるくらいまではもつかなw
ゲームとかで激しく使うわけじゃないから壊れたと思っても分解清掃したら復活して全然壊れないw
2017/09/05(火) 16:24:36.71ID:2p8x7jza0
WinActivateでwindowを指定したいんですけど、
同じアプリで2つwindowを開いてるからタイトルもクラスも同じだから、
先に起動したほうのwindowがアクティブになるんです。

後に起動したwindowをアクティブにしておいてからやっても、先に起動したほうの
windowがアクティブになってしまう……。
何か解決方法ありますでしょうか?
2017/09/05(火) 16:44:05.17ID:iCCxh9rp0
>>939
絶対にAutoHotkeyを使って起動させると決めておけば、runの時に指定したプロセス名で自由自在じゃないかな
2017/09/05(火) 16:55:00.19ID:2p8x7jza0
>>940
再起動したら、2つあるうちのactiveな方のwindowを操作できるようになってました……。
よく動作が分からない……。
2017/09/05(火) 16:56:06.02ID:S621LfW+0
>>939
ウィンドウハンドル(ahk_id)で指定
2017/09/05(火) 17:02:37.45ID:uXUJebp/0
>>939
ウィンドウハンドルで指定

https://msdn.microsoft.com/ja-jp/library/cc344590.aspx
> Windows では、作成されたウィンドウにハンドルを割り当て、ウィンドウが削除されると、割り当てているハンドルを解放します。
> ウィンドウが存在する限りそのハンドルは保持されますが、ウィンドウを一度削除して再作成したときに同じハンドルが割り当てられるとは限りません。
> ハンドルを変数に保持する場合は、ウィンドウが削除されるとそのハンドルは無効になることに注意してください。
2017/09/05(火) 17:16:57.45ID:2p8x7jza0
>>942
>>943
ありがとうございます。またコードを改良してみます。
2017/09/07(木) 12:23:30.02ID:/lAMkvyj0
Win7です。 WindowsUpdateを起動するとき、

Run, wuapp

とすると、WindowsUpdateのウインドウが出てきますが、一発で更新プログラムの確認をしたいのです
今は、このウインドウを起動して、あとは手作業でマウスを動かしてやっていますが、
一発で更新プログラムの確認が出来る方法、コマンドってありますか
2017/09/07(木) 12:49:12.76ID:oQQtUb2M0
コマンドライン調べて無理そうなら
send でtabenterするなりcontrolclickするなりしてみたら
2017/09/07(木) 12:53:11.31ID:ltKuwJLg0
(C)
2017/09/07(木) 13:29:37.64ID:e+e3r0hl0
Tabキー連打からのEnterキーを送れば良いんではないでしょうか
2017/09/07(木) 14:14:07.50ID:/lAMkvyj0
なるほど。やっぱりTABで回してからEnterしかないのかな
ありがとう
2017/09/08(金) 01:15:04.77ID:xyKAQtlP0
Hotkey Explorerなんてツールがあるんだな
大昔に割り当てたまま忘れ去ってたホットキー発見できた
2017/09/08(金) 16:32:15.31ID:DlVZMNm+0
忘れるくらいなら最初からほっときい
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

ミドルキーを押すと連打、もう一度押すと連打解除のスクリプトを作りたくて組んだのですが、
連打解除が出来ない状態です。
どなたかアドバイスをお願いします。
2017/09/10(日) 06:26:05.60ID:9UIYY5GX0
ループ内sleepでMbuttonイベント内部に留まり続けてるせいで
次の押下があっても割り込み発生しないのでは
timer発生させてMbuttonはreturnですぐ抜ける
連打処理はtimerのなかでやる
2017/09/10(日) 06:45:31.30ID:i6WpSb1i0
他にも、

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

さらに、ちゃんと値入れたとしてもそれ何度押しても絶対trueになる
2017/09/10(日) 07:29:40.41ID:9UIYY5GX0
本当だ
elseifじゃないから2回if通ってるわ
2017/09/10(日) 08:56:43.07ID:Gp5DYXYz0
ちょっと確認してみます。
アドバイスありがとうございました。
2017/09/10(日) 09:07:45.68ID:Gp5DYXYz0
clickEnable := false

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

すいません。
やはり動きませんでした。
更に助言を頂ければ幸いです・・・。
2017/09/10(日) 09:42:03.19ID:i94Q7tou0
放っとけ と音の近いホットキーを並べて発音し、面白さ表現を狙っています
2017/09/10(日) 09:44:54.59ID:9UIYY5GX0
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がオススメなんだとは思うが
沢山あるネット入門ページが変なのは今までの歴史の重積のセイだと思うんだけど、
コレじゃ新規ゆとりんには流行らんわコレ

あまりに案内がメチャクチャ過ぎる
2017/09/10(日) 10:33:39.93ID:ZLodYEhw0
>>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が同じパックで配布されるようになって入門のあたりはだいぶ信用できなくなってるけど
それ以外は昔の記事でも役に立つから…(震え声)
2017/09/10(日) 10:57:13.22ID:9Ln2fu6j0
むかし流行らせた本人はもう流行らせたくないつってサイト閉めちゃったからねぇ
正直>960が何言ってるのかよくわからんが AHK分かりにくいよ何参考にしたらいいんだよ ってこと?

アプデ追従常時最新じゃないにしろ AutoHotkey Wikiなら情報古すぎて役に立たないってことはない
AHK v2についてはα版だし解説も少ないので初心者がいきなり手を出さないほうがいい
2017/09/10(日) 11:43:33.03ID:ZLodYEhw0
>>952>>957
勘違いだったら悪いけど、スクリプトがどういう順番で動いているかの理解がいろいろ間違ってる

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

やり方としては、一度のMButton::ラベルの中だけで全部終わらせるようにする
具体的にはloopの中に、2回目のミドルクリックをkeywaitかinputとかgetkeystateとかで感知してbreakする処理を入れてやる
keywaitおすすめ
2017/09/10(日) 15:58:05.30ID:Gp5DYXYz0
>>963
ありがとうございます。
まだ動かないのですが、今はこんな感じで調整してみました。

MButton::
loop{
click
sleep 250
keywait , MButton , D
break
}
return
2017/09/10(日) 16:49:29.43ID:/9OPRtmP0
>>964
横槍だけどLoop使わないでSetTimerでクリックを繰り返せばって話じゃないの?
あとはMButton押すたびにSetTimerをオンオフ切り替えれば良いだけかと
2017/09/10(日) 17:54:59.37ID:9Ln2fu6j0
キーボードだったらキーリピート発生するから>893みたいな例でKeyWaitやGetKeyState使えるけど
マウスの場合 Send, {Lbuton Down}してもクリック連打にはならないので
MButton::スレッド内で完結させるのは難しい

KeyWait中はクリック連打させられないしGetKeyStateでBreakしちゃったら
その後の再押下までやっぱりクリック連打されない
Loopは諦めて素直にSetTimerにしたほうがいい
2017/09/10(日) 18:17:46.69ID:Y7cFsSEb0
mbutton::
keywait,mbutton
loop{
click
keywait,mbutton,d t0.25
if !errorlevel
break
}
return
2017/09/10(日) 20:08:04.68ID:ZLodYEhw0
>>954
俺の書き方が悪かった、その調整で大体あってるけどそれだと
ループに入った後に次のミドルクリックをひたすら待って2回目のミドルクリックでbreakしてるか
あるいは1回目のミドルクリックが離される前にkeywaitの判定に入っちゃって即座にbreakしてる
どちらにしろループの1回目でbreakしてるから連打できてない

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

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

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

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

あと最初に言えばよかったんだけどlistlinesかタスクトレイメニューのOpenでスクリプトの流れが見えるから
今回くらいの短さのやつならそっちを確認しながらやるといろいろ捗る
2017/09/10(日) 20:56:51.46ID:ZLodYEhw0
せっかくだからタイマー使うやり方も
スレッドが2つになるのがあんまり好みじゃないけど、こっちの方が最初に希望してた動作に近いかな?

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

clicktimer:
click
return
2017/09/11(月) 01:29:02.79ID:Moiu+rBD0
>>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
の「キー連射スクリプト」では動かない?
2017/09/11(月) 05:01:50.02ID:HJJLJNG10
皆さんありがとうございました。
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版」で何も問題ないと思うよ。
2017/09/11(月) 13:11:55.55ID:/0w7mLR10
AHKの書籍あったらいいのになあ
寝る前とかにパラパラ読めたらさぞよかろうに
2017/09/11(月) 13:43:58.58ID:hHI5OB/r0
>>972
普通にインストーラーからインストールした場合64bitOSだとU64版が「AutoHotkey.exe」になって
ahkファイルもそこに関連付けされるけどU64版で何も困ったことは無いな
2017/09/11(月) 21:30:39.92ID:gvgo1xfh0
>>971
settimerはコマンドで、settimerのパラメータにユーザー定義ラベルを指定する必要があって
ユーザー定義ラベルの代わりにユーザー定義関数が最近使えるようになった、てのが正確なところだけど…
まあ当初の目的が達成できたならよかったよ
2017/09/12(火) 02:58:27.50ID:6AFuQYBa0
>>975
達成も何も、ゆとりの教えたがりがスクリプト丸々張っただけだがな
2017/09/12(火) 03:37:20.22ID:q1GGHISr0
>>964まで辿り着いたんだから十分だろう
2017/09/12(火) 06:57:36.69ID:a3KK4HLqM
何回教えてもダメな子にはもう面倒だから丸ごとスプリクト与えちまえみたいな
前例作っちゃったのは良くないがな
2017/09/12(火) 07:18:57.19ID:aE6Ly69Y0
ここはそんなに教育的な場なの?
質問者のネタ提供に対して、回答者達があれこれ楽しくスクリプト例を出し合うのも良いんじゃないかな。
2017/09/12(火) 07:45:27.70ID:FVt7NWTY0
時間をかけてAutoHotkeyマスターになったところで一銭にもならないしな・・・
2017/09/12(火) 08:20:42.72ID:2WtjvSiA0
ここんとこ解答者の言わんとしてることをあまり理解しようとしないで
こうですか?わかりません!
をくり返す質問が増えたなあ、としみじみ思う
同一人物なのかも知れんけど
レス数が950を超えています。1000を超えると書き込みができなくなります。
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

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