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

■ このスレッドは過去ログ倉庫に格納されています
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/04/29(土) 21:59:24.43ID:r6kgVtY20NIKU
Windows10 pro 64-bit
AutoHotkey Unicode 64-bit ファイルバージョン1.1.25.1

メモ帳を開いたら、タイマーを起動、ツールチップにタイマー作動!と表示し続け、 60秒毎にメモ帳にABCと入力を繰り返す。
メモ帳を閉じたら、タイマーを終了し、ツールチップを消し、 メッセージボックスでタイマー停止!と表示する。

WinWait, ahk_class Notepad
{ SetTimer, InputTimer, 60000
ToolTip, タイマー作動! }
Return

InputTimer:
IfWinExist, ahk_class Notepad
{ ToolTip, タイマー作動!
Send, ABC }
Else
{
WinWaitClose, ahk_class Notepad
{ ToolTip,
MsgBox, タイマー停止!
SetTimer, InputTimer, Off }
}
Return

上記で、目的の動作は概ね実現されるのですが、一つだけ気に入らないところがあります。
メモ帳を閉じた直後に、タイマー停止!のメッセージボックスが表示されないのです。
どうやら、メモ帳を閉じた後も、作動中のタイマーは直ぐには停止せず、 セットした60秒間が経過したタイミングでタイマーが終了し、メッセージボックスが表示されるようです。
メモ帳を閉じるタイミング、タイマーが終了するタイミングにかかわらず、 メモ帳を閉じた直後に、タイマー停止!のメッセージボックスを表示させる方法があればご教示ください。 よろしくお願いいたします。
2017/04/29(土) 23:23:53.88ID:zp4a0efb0NIKU
コピペで動かないので動作検証はしないけど

・60秒ごとの入力監視タイマー と メモ帳終了監視タイマー を分ける
・終了監視はWinWait使うならタイマーは回さないで1タイムのみにする
・それか0.5〜1秒間隔タイマーでifWInNotExistですぐ抜けるを繰り返すものにする
2017/04/29(土) 23:59:37.57ID:z1NB2zPu0NIKU
>>335
そもそも float や double の比較に、等値や不等値演算子を使うこと自体が NG なんよ
AHK に限った話じゃないから適当に検索してみてくれ
2017/04/30(日) 08:17:25.06ID:608QOK9p0
>>337
アドバイスありがとうございます。
別に終了監視タイマーを、IfWinNotExistで設定してみましたが、
やはり入力監視タイマーが終了しなければ作動しないようです。
引き続きよろしくお願いいたします。
2017/04/30(日) 08:45:23.32ID:VC0AsQZa0
プログラミング詳しくないのでわからないんですけど
0.5秒や1秒短い間隔のタイマーって負荷すごかったりしないんですか? 処理による?
2017/04/30(日) 09:07:53.16ID:b1zEeBw50
>>340
タイマー自体の負荷は気にしないでいい、問題は処理の中身
1000個のタイマーを1msで同時に回してもCPU使用率は0%
シングルスレッドだから当然といえば当然だが

Loop 1000
SetTimer, TEST%A_index%, 1
Return

TEST1:
TEST2:
〜中略〜
TEST1000:
Return
2017/04/30(日) 09:11:02.27ID:VC0AsQZa0
そうなんですね ありがとうございます
なんとなく忌避しちゃってたけど心置きなくタイマー作ってみようと思います
2017/04/30(日) 10:08:45.09ID:90OcEDAQ0
>>339
うちでは動いてるのでやり方には問題ないはず

>337でも書いたが>336はSyntaxErrorで動かない
そういうソース貼って質問した後に
やったけどダメでしたって書き換えたソース貼らずに言われても
こちらとしてはソース見直せとしかアドバイスできないよ


あと質問とは直接関係ないので触れなかったけど
60秒毎タイマーというのは誤差が60秒あるという意味なので
1秒タイマー内で60カウント数えてからSendするほうが動作としては望ましい
(まあそうするとタイマーを分ける必要もなくなるんだけどね)
2017/04/30(日) 10:57:21.94ID:608QOK9p0
>>343レスありがとうございます。336をそのままコピペすると動きませんね!申し訳ありませんでした。
2chの掲示板に投稿するときに、『改行が多すぎます!』と何度も警告されて全く受け付けてくれなかったたため、不要な部分をそぎ落としたのが悪かったみたいですね。IfWinNotExistで書き換えたスクリプトをそのままコピペします。ご添削のほどよろしくお願いいたします。
#InstallKeybdHook
#UseHook
#InstallMouseHook
#Persistent
WinWait, ahk_class Notepad
{
SetTimer, InputTimer, 60000
ToolTip, タイマー作動!
}
Return
InputTimer:
IfWinExist, ahk_class Notepad
{
ToolTip, タイマー作動!
Send, ABC
}
Else
{
SetTimer, ExitTimer, -1
SetTimer, InputTimer, Off
}
Return
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
ToolTip,
MsgBox, タイマー停止!
}
Return
>>1秒タイマー内で60カウント数えてからSendするほうが動作としては望ましい ⇒具体的にはどのように記述するのでしょうか?
2017/04/30(日) 11:54:38.51ID:608QOK9p0
344
補足です。
ExitTimerを1秒間隔で設定したところ、
InputTimerのサブルーチンが終了するまでの間、
メッセージボックスを残秒数分吐き続けてしまったため、
負の値にしてワンタイムのみにしてあります。
2017/04/30(日) 12:03:45.49ID:90OcEDAQ0
>>344
・ExitTimer はメモ帳の起動待ち直後 SetTimer,InputTimerの次行あたりで起動させる
(InputTimer内で起動したのではタイマーを分けた意味がない)

・ExitTimerの間隔指定がおかしい、-1(1タイムのみ) で ifWInNotExistだと初回 else終了でそれっきりになる
   方法1 間隔は500〜1000msで繰り返し確認、タイマ内では待たずにifWInNotExistですぐ抜ける
   方法2 -1で1回のみ起動にするならWinWaitCloseでタイマ内で終了待ちする
  どっちでもいいけどどっちかに決める、混ぜたらどちらもまともに動作しない

・WinWaitの後に{ }はいらない、ifや関数で使う括りなので。

・あとInputTimer内で IfWinExistでSendしてるけど、これだとメモ帳がバックグラウンドのときに誤爆する
 IfWinActiveの判定入れるか強制的にWinActivateするか(動くなら)ControlSendにした方がいい


> 1秒タイマー内で60カウント数えてからSend
・InputTimerを1秒間隔で起動、count=60
・InputTimer内でcount-- して 0(以下)になった時にSend
・ToolTip, タイマー作動! %count% とかやっとくと残り時間も分かってデバッグにも便利
2017/04/30(日) 13:28:00.93ID:90OcEDAQ0
>>345
ExitTimerは終了後にするべき作業を全て任せるためのものだよ
InputTimer と ExitTimer の停止も当然ExitTimer内でやる
でなきゃ60秒誤差を回避できないでしょ
2017/04/30(日) 23:10:29.99ID:608QOK9p0
345 アドバイスをもとに再度スクリプトを書き換えました。メモ帳を初めて起動したときは問題なく目的の動作をしているようですが、
いったんメモ帳を閉じてメッセージボックスのタイマー停止!を表示させた後に、再度メモ帳を起動させると、全く動作しません。
AHKスクリプトをリロードしてからメモ帳を開くと、また初回のみ動作します。まだどこかおかしいのでしょうか?

WinWait, ahk_class Notepad
SetTimer, InputTimer, 1000
Count=60
SetTimer, ExitTimer, 1000
ToolTip, タイマー作動!
Return
InputTimer:
IfWinActive, ahk_class Notepad
{
ToolTip, タイマー作動!%count% 秒後に入力
Count--
If Count=0
{
Send, ABC
Count=60
}
}
Return
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
SetTimer, ExitTimer, Off
SetTimer, InputTimer, Off
ToolTip,
MsgBox, タイマー停止!
}
Return
2017/04/30(日) 23:17:22.73ID:608QOK9p0
348
試しにメモ帳再起動監視タイマー(RestartTimer)を増設してみたところ上手くいっているように思いますが、
なぜこれが必要なのでしょうか?

ExitTimer:
IfWinNotExist, ahk_class Notepad
{
SetTimer, ExitTimer, Off
SetTimer, InputTimer, Off
ToolTip,
MsgBox, タイマー停止!
SetTimer, RestartTimer, 1000
}
Return

RestartTimer:
WinWait, ahk_class Notepad
SetTimer, RestartTimer, Off
SetTimer, InputTimer, 1000
Count=60
SetTimer, ExitTimer, 1000
ToolTip, タイマー作動!
Return
2017/04/30(日) 23:37:01.95ID:90OcEDAQ0
なぜと言われてもNotePad起動待ちのWinWaitを冒頭1回でしかやってないでしょ
基本的な部分なのでちゃんとwiki読んできたほうがいい
あと何度も言うけどTimer内でWinWaitで待つならワンタイム起動にしなさい
2017/05/01(月) 00:32:05.61ID:0V0GtOjk0
>>350 何度もすみません。
メモ帳初回起動時にしか動作しない理由はわかりました。
348+349の記述に書き換えても、正常に動作していないということですか?
ExitTimerの部分を -1(ワンタイム)に訂正すれば問題なしでしょうか?
また、タイマ内ではIfWInExist(Active)やIfWInNotExistは使用してはいけないということですが、
タイマ外に記述しても全く反応しないのですが・・・
>>タイマ内では待たずにIfWInNotExistですぐ抜ける という意味がよくわかりません。
wikiも読み直してみますので、引き続きよろしくお願いします。
2017/05/01(月) 01:45:38.34ID:+5nnd5240
>>351
先ずはトライアンドエラーで動くまで納得の行くまで色々試せ

とりあえずこんな感じでも動くことは動くはず
>>348の上半分は同じで、ExitTimer:部分は↓
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
Count=60
ToolTip, タイマー停止!
}
Return
2017/05/01(月) 02:14:42.84ID:KYVCJ0Be0
>>345
上三行それでいい
下四行全然ちがう
タイマー内で使用してはいけないともタイマ外に書けとも言ってないよ
何か全然通じてないみたいだがもしやwinwaitとifwinexistの違いが分かってない?
winwaitは対象ウィンドウが存在するまで待つ
ifwinexistは今現在対象ウィンドウが存在してるか調べる

1秒ごとにタイマー動かすならタイマールーチン内の処理は1秒未満で終わる内容にしないと
「1秒間隔で繰り返し実行」できないでしょ
→winwaitのような「待ち」の処理はNG
 ifwinexistで存在チェックしelseなら即returnする
 待たない=ルーチンからすぐ抜ける

ワンタイムタイマーの場合はその逆
一度しか実行されないのでreturnで抜けたらそれきりになってしまう
→ifwinexistで即抜けしたらそれ以降の確認ができない
 なのでwinwaitで対象ウィンドウが存在するまで「待ってやる」
2017/05/01(月) 03:25:19.73ID:LZHpjIsmM
タイマーで長時間監視させてるとOSの処理とかcpu負荷によって実際の時間とはズレが生じてくる
2017/05/01(月) 15:47:16.28ID:zUK3JZ+qd

【女神】Slot
💰💣👻
🍒🍒🎴
😜🍜🍜
Win!! 7 pts.(LA: 1.71, 1.69, 1.71)
2017/05/02(火) 00:33:03.47ID:C+V/zU+9d
 .彡⌒ミ
(´・ω・`)
2017/05/02(火) 07:21:37.29ID:jZspGgXG0
351 これでどうでしょうか?全く問題なく動作しています。ご意見ください。

WinWaitActive, ahk_class Notepad
SetTimer, InputTimer, 1000
Count=60
ToolTip, タイマー作動!
SetTimer, ExitTimer, -1
Return
InputTimer:
ToolTip, タイマー作動!%count% 秒後に入力
Count--
If Count=0
{
Send, ABC
Count=60
}
Return
ExitTimer:
WinWaitClose, ahk_class Notepad
SetTimer, InputTimer, Off
ToolTip,
MsgBox, タイマー停止!
SetTimer, RestartTimer, -1
Return
RestartTimer:
WinWaitActive, ahk_class Notepad
SetTimer, InputTimer, 1000
Count=60
ToolTip, タイマー作動!
SetTimer, ExitTimer, -1
Return
2017/05/02(火) 09:40:25.10ID:Z3jAVDE20
思考停止してるなあ
動くかどうかにしか興味ないならもうそれでいいよ
2017/05/02(火) 13:03:30.64ID:/3o9eW+p0
>>358
ご多用にもかかわらず、合い間を縫って掲示板をご確認くださりありがとうございます。
思考が停止していますか・・・
問題なく動いているので満足してしまえばよいのかもしれませんが、
せっかくですからもう少しAHK追求してみたいと思いますので、貴殿の優秀な頭脳をお貸しください。
余裕がおありであれば、もう少し具体的にダメだしをいただけるとうれしいのですが・・・
数日前からAHKを知った新参者が、貴殿のように理解を深めるためには、
wiki以外にどんな書物を読めばよいのかもご教示いただけると助かります。
引き続きよろしくお願いいたします。
2017/05/02(火) 14:42:10.23ID:sIGtYt8F0
すみません。前にも書かせていただいたんですが、
ホットストリングが一回で起動しません。一回目無反応で2回目にスクリプトが発動がされます。
どうやれば一回目から起動してくれるのでしょうか?

ホットストリングの部分のみを抜き出してそれのみのAutohotkey.ahkだと失敗しないように思うんですが、
#IfWinActiveでいっぱい仕切られたいつものAutohotkey.ahkのなかにおいたホットストリングだと
一回目失敗します。どうしてでしょうか?教えてください
2017/05/02(火) 15:09:31.72ID:z6v/KZl40
>>360
>>2
■質問に際して
>操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
2017/05/02(火) 15:53:46.56ID:gYhDstJX0
>>359
横からだけどあまり畏まると却って嫌らしくみえるよ。長文だと尚更
Wikiで十分理解できる範囲だし難しく考え過ぎ
2017/05/02(火) 16:33:10.81ID:rrJHUz/00
>>362
嫌みを言ってるだけだろw
2017/05/02(火) 16:40:37.44ID:NmO727YQ0
どうみてもストレートな嫌味での皮肉だなw
2017/05/02(火) 16:51:22.50ID:Z3jAVDE20
コードそのものよりシーケンスの考え方を伝えたかったんだけど
>353総スルーで、完璧に動いてるのでこれでいいですか? て言われてしまうとね
まあ結局こっちの説明が下手すぎて伝わらなかったということなんだろう

コードの添削はしません
本人がよくわかってないまま修正するとまたバグが出てぐちゃぐちゃになるし
自分でどこを最適化したらよいか分かるようになってから自力でして下さい
2017/05/02(火) 18:53:40.69ID:/3o9eW+p0
359
>>365
353を総スルーしているつもりも、嫌みのつもりもないのですが・・・
『完璧に動いてるのでこれでいいですか?』というくだりも、
何らかの陰性感情を抱かせてしまったようですね。
手抜きをしているように映ってしまったということでしょうかね?

いずれにしても357の記述が不適切であるということは伝わってきました。
貴殿の気持ちがわかるまで、wikiを熟読して出直してきます。
ここまでお付き合いくださり、ありがとうございました。
2017/05/02(火) 19:12:14.89ID:v127Vr0k0
慇懃無礼というやつだな
2017/05/03(水) 17:41:53.64ID:mGMZlHNu0
誰にもメリットないし NG しときゃ良いんだよ
2017/05/04(木) 16:48:49.62ID:EVEHliNj0
そんなことより>>360を解決してください。一回の入力じゃ無視されること多々あります
2017/05/04(木) 16:52:41.96ID:RS2hmNwi0
>>369
>>2
■質問に際して
>操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
2017/05/04(木) 16:55:27.54ID:H4uy8L700
>>369
ない
2017/05/04(木) 17:17:11.97ID:jtmuQjaf0
>>369
とりあえずコード貼ってみたら?
2017/05/04(木) 22:12:03.19ID:EVEHliNj0
とりあえず貼ります。

::kyouda::
FormatTime,imaTimeString,,yyMMdd
FormatTime,imajikan, L0x0409 T1,ddd
FormatTime,imaTime,Time,HH:mm
SendInput '%imaTimeString%%imajikan%%imaTime%
Return

でも記述がこの箇所のみでautohotkey.ahkとして起動しているとたぶん必ず一発で起動してくれるんですが、
普段つかってるこの箇所のほかにもいろんな記述があるautohotkey.ahkで動かすと、
イメージで5回に1回、初回のホットストリング打ち込みで無反応です。
kyouda{スペース} ってふつうに入力されるだけです。そのあとすぐ続けると2回目は必ず成功するイメージです。
2回連続失敗ってのは印象にないです。
なにか考えられるような要因ありますか?

GroupAdd, GameBindGroup, ahk_exe Overwatch.exe
#IfWinActive
#IfWinActive ;個別設定がでいっぱい
#IfWinNotActive, ahk_group GameBindGroup
#IfWinActive
#IfWinActive ;個別設定がでいっぱい
みたいな感じの構成で区分けています。
2017/05/04(木) 22:35:13.26ID:kC5yyJMz0
ならそのごちゃごちゃしてる他が干渉してるんでしょ
その肝心のごちゃごちゃ部分全部見ないとなんとも言えない
ログ見てどんな動作してるか確認してみないとね
とりあえずホットストリングをスクリプトの一番上に記述して同じ動作するか試してみ
2017/05/04(木) 22:49:24.04ID:EVEHliNj0
ですよね。ゴチャゴチャいっぱい書いてるうちのどこかが干渉してるんですかね。
autohotkey.ahkはいまみたら1980行でした。

ホットストリングの位置を前だったり後ろだったりいろいろ変えてみたんですが、やっぱりだめでした。
2017/05/04(木) 22:54:29.44ID:58DNMeaN0
それは1回ちょっと整理した方がいんじゃないか
2017/05/04(木) 22:55:27.87ID:kC5yyJMz0
スクリプトのログにちゃんと実行履歴があるなら
そのスクリプトを使用するアプリケーション側の相性や問題の可能性もある
俺もそこんとこ詳しくないからあまり言えないけど基本はまぁトライアンドエラーだし頑張りな
2017/05/04(木) 22:59:15.73ID:xMZhJJeb0
>>375
限界まで「自分で」地道にコードを削って動作確認
話はそれから
2017/05/05(金) 20:50:08.16ID:Vpqe3LRZ00505
複数のスクリプトを常駐させておきたい場合は、*.ahkを引数にしてそれぞれ
起動して使うものなのでしょうか? それとも、AutoHotkey.ahk からそれぞれの
*.ahkを引数にして、子プロセスをフォークして使うものなのでしょうか?

最近使い始めたのですが、一般的にどのように使っているのか分からなかったもので。
2017/05/05(金) 22:00:06.04ID:TRiKEWTN0
実行履歴があるのでそれをみる
使う対象のアプリ側との問題
自分で削って動作確認

一発でダメなのが判明するって性格のもんじゃないし、トライアンドエラーがめんどくさそう。
ホットストリングが発動しない確率が高いっていうかんじのものだから。
実行履歴にたしかに実行したスクリプトが載るけど、これみてどうしいいものやら

ありがとうございました。やってみます。
2017/05/05(金) 22:40:09.32ID:pP7Woi3/0
>>379
>*.ahkを引数
意味が分からないんだけど?何の引数?
2017/05/05(金) 22:50:32.77ID:ZSng4Fyk0
>>380
コードの長いやつから、独立したahkファイルに移行させて#Includeで管理するとかすればいいんじゃない
自分もそれで知らん間に動かなくなってたスクリプトが復旧できたことがある
いまだに原因が分からんがw 動いたらそれ以上調べる気が起きなかった
2017/05/06(土) 01:18:07.92ID:4LDITw9p0
>>379
SetTimer使うのが普通だと思う。
2017/05/06(土) 09:35:50.00ID:J5De719LM
>>379
autohotkey.ahk以外のスクリプトをどう起動するかって話なら
.ahkをautohotkey.exeに関連付けしてる人が多いんじゃないの
ポータブルに使いたいならbat作るなりautohotkey.ahk内の任意のタイミングで
runするなり好きにしたらいい
自分はエディタで編集中ahk実行マクロ作って試行してる

あと常時複数起動する前提ならプロセスとして分ける必要が本当にあるのか考えてみるべき
そうでないなら#includeでautohotkey.ahkにマージする
2017/05/07(日) 02:45:07.91ID:/qUzlPjG0
アクティブなウィンドウを画面の四辺に退かせるようにしようと思ったんですが
右端に移動と下端に移動が反応しません
どう書けばいいんでしょうか?

#Right::
WinGetPos, X, Y, Width, Height
WinMove, A, , A_ScreenWidth-Width
return
2017/05/07(日) 03:14:11.06ID:9FhLouSj0
>>385
WinGetPosをもう一度じっくり見直し
2017/05/07(日) 04:10:21.20ID:Sp0KdGmO0
省略してはいけないものが省略されてる
2017/05/08(月) 15:48:03.40ID:sgEHR+K40
すみません教えてください。

Func( path ) {
EnvGet, home, HOME
Run, %path%
}

上記のような関数に対し、
Func( "%home%\aaaa.exe" )
と呼び出した場合、実際に実行ファイルがあったとしても
パスが見つからないと言われてしまいます。

%path% の中の %home% が展開できないのではないかと考えたのですが、
多重の % を展開する方法はありませんでしょうか?
2017/05/08(月) 15:57:32.89ID:7swUnAyw0
>>388
>>273
2017/05/08(月) 16:04:50.67ID:sgEHR+K40
>> 389

ありがとうございました。
2017/05/08(月) 17:51:12.62ID:n+ysgQT20
https://autohotkey.com/boards/viewtopic.php?f=6&;t=6399
これ、面白いな
2017/05/09(火) 14:12:20.82ID:v0GmuPss0
AHKでやれよとおもったらAHKだったw

Vector 新着ソフトレビュー 「俺のキーボード」 - 「【BackSpace】+【Delete】で一行消し」などを行える“俺=作者”仕様のキーボード機能拡張ソフト
http://www.vector.co.jp/magazine/softnews/170509/n1705091.html

>【Win】+【A】で、アルファベットで打ってしまった文字を日本語で打ち直し
これはどういう実装なんだろうか
393名無しさん@お腹いっぱい。 (ワッチョイ 278e-Wm8h)
垢版 |
2017/05/09(火) 15:12:31.09ID:3+cE2t/J0
oi
misu
ってやつが
「おいミス」になるのかな
2017/05/09(火) 15:19:44.20ID:ep1GBXYg0
単純にアルファベット選択して変換キー押した動作と同じっぽい
2017/05/09(火) 15:35:42.26ID:YHfNFChO0
要らねえな
2017/05/09(火) 16:38:05.41ID:D6Yawi3g0
>>392
これLIB内の自動インクルード考慮しないでexe作っちゃってないか
IME_ON / IME_OFF の実態関数がないから機能しない
配布用exe作ったが本人はahkから実行してるから気づいてないってパターンぽい

まあスクリプトの方実行してもエラーになるけど
初期の頃のIME.ahkにしかない古い関数だから
さすがは俺環境ソフト
2017/05/09(火) 16:42:26.15ID:Zqe7Gozh0
作者ここの住人じゃないの
2017/05/09(火) 16:51:39.12ID:TqQ3ywXr0
AutoHotkeyの認知度に貢献してくれれば本望だな
2017/05/09(火) 19:28:38.09ID:uUNwpeuV0
とりあえずアドレスを貼るのみで、当スレからは立ち去りますが、
もし興味ある方は読まれて下さい。

(万人にプラスになる知識)
《神・転生の存在の科学的証明》
http://message21.web.fc2.com/index.htm

  
2017/05/09(火) 23:40:11.32ID:PXpMId0P0
>>392
>【Win】+【A】で、アルファベットで打ってしまった文字を日本語で打ち直し
↑はクリップボード使うみたいだけど、過去スレにそんな趣旨のスクリプト書かれてたがそれは「input」コマンド使用してるね
AutoHotkey スレッド part16
http://anago.2ch.net/test/read.cgi/software/1367725658/164-165
2017/05/09(火) 23:46:20.11ID:pWGqFUI10
+^left
^c
IMEオン
Sendでクリップボード出力

で大体似たようなことができる
2017/05/13(土) 03:30:17.50ID:Yj8xdb2h0
マウスを数秒間放置したらマウスカーソルを非表示にして、マウスを動かしたら
瞬時に表示されるようにするといったことはAHKで出来ますでしょうか?
もし可能ならばどんなコマンドを利用すればいいのかヒントだけでも頂けないでしょうか
2017/05/13(土) 04:42:46.58ID:G8PnK+ii0
>>402
日本語でも英語でもググルと載ってるよ
2017/05/13(土) 05:15:29.72ID:Yj8xdb2h0
>>403
ahk マウスカーソル 非表示
でググってみたけど目的のコマンドには辿り着けませんでした
もう少しヒントを頂けないでしょうか
まずはマウスカーソルを非表示にする方法さえ分かれば有難いのですが
2017/05/13(土) 09:15:12.46ID:IAUn2tZc0
>>404
コマンドって…一行で書けるようないわゆるコマンドは無いと思ったが

googleで「site:2ch.net ahk マウスカーソル 非表示」と2chに絞り込めば探しやすいだろう
2017/05/13(土) 14:22:40.80ID:e0r9kSFN0
DllCallでゴリゴリやる系は日本語で2chログ漁るより本家フォーラムを捜したほうがいいと思うが

hide Cursor ahk でググればそのまんまのモジュール関数出てくるし
ON/OFFはタイマーでA_TimeIdlePhysicalあたり監視すりゃいいんじゃないの
2017/05/13(土) 22:44:29.36ID:6BUBIjdu0
autohotkeyってボタンとか作れるの?
2017/05/13(土) 23:05:43.77ID:A4PaxIkp0
GUIなら結構簡単に作れる
2017/05/14(日) 08:49:21.83ID:/8OjOfMl0
ほ〜調べてみるわ
サンクス
2017/05/14(日) 13:02:06.46ID:6Fo4qCmh0
if ( %str1% = "mojiretsu")

のように文字列を""で囲んで比較したいのですがうまく行きません
生の文字列を””なしでコード中にそのまま書くのは避けたいんですが無理なんでしょうか?
2017/05/14(日) 13:15:06.03ID:wWYa+LOS0
所詮シェルスクリプト風の文法だし気持ち悪さになれるしか無いんじゃないの
どうしてもと言うなら
v:="mojiretu"
if str1==%v%
2017/05/14(日) 13:39:42.50ID:wC97xrej0
>>410
比較対象文字列が「"ほげほげ文字列"」という「"」も含む文字列ってこと?
書き方はいろいろあると思うけど、自分なら↓かなー

mojiretu := """ほげほげ文字列"""
if (str1 = mojiretu)
2017/05/14(日) 13:40:16.40ID:ysqfqjcX0
str1 := "mojiretsu"
if (str1 = "mojiretsu")
2017/05/14(日) 14:39:39.10ID:G5OYDNes0
%str1%の方は用法わかった上で使ってるん?

aaa := "mojiretsu"
str1 := "aaa"
if ( %str1% = "mojiretsu")
ToolTip,a
return

これで問題なく動くし間違えてないなら上手くいってると思うけど
2017/05/14(日) 15:52:10.04ID:Z9YfQS7e0
文字列ならstr使う方法も
if instr(str1, "mojiretsu")
2017/05/19(金) 08:55:09.24ID:zuLrkofa0
関数内でgoto使うのはあまり好ましくない?
func(){
label1:
...
if
{
goto, label1
}
}
2017/05/19(金) 09:30:58.27ID:mgmtBcLG0
いやべつに
2017/05/19(金) 09:32:44.30ID:E8LWLLPy0
美しくないだけ
2017/05/19(金) 09:57:24.07ID:GgHVwYsF0
頭に戻って繰り返し〜みたいな場合はループか再帰関数にするわ自分なら

多重ifやループから抜けて一気に終了処理に飛びたい時はgotoも使うけど
func(){
 if () {
  …
  if () {
   …
   if () {
    …
   }
   else goto exit
  }
  else goto exit
 }
exit: ; 後始末
 …
}
2017/05/19(金) 10:02:26.47ID:zuLrkofa0
ifの式が真の間、直前のコードと同じ処理をしたい時にまた同じ処理書くとコード長くなるのが嫌だからさ・・・
そこだけピンポイントで使うからそれだけのためにまた別の関数やライブラリ用意するのも微妙だしと思って他にいいアイデアないかと思った
2017/05/19(金) 10:06:05.45ID:zuLrkofa0
>>419
うーんwhileとかが使える条件だとそうしたいんだけどね
2017/05/19(金) 10:19:53.11ID:goZd5y1V0
Win10のファイルエクスプローラーでホイールを使ってファイルのフォーカス移動したいんだけど
表示方法によって移動がUp、DownとLeft、Rightで変わっちゃうんだよ
なんかいい方法ないかな?「次のファイル」みたいなショートカットが見つからない
ウィンドウの上部と下部でホイール回すとファイルのフォーカスが移動するように設定してて
応急処置として~RButton & WheelUpDwon の時だけ{Up}{Down}にしてる
2017/05/19(金) 10:32:51.22ID:6AxPrEfaM
>>421
再帰じゃだめなん?
2017/05/19(金) 10:43:49.45ID:zuLrkofa0
>>423
ごめん>>416が適当すぎた
再帰だと>>419みたいに条件がいくつもある場合に同じことしたいと上手く対応できない
2017/05/19(金) 17:06:38.10ID:2AN/Hzrs0
>>422
ExplorerItemFocus(Up:=False) {
  For Window In ComObjCreate("Shell.Application").Windows
  {
    If (WinExist("A") != Window.Hwnd)
      Continue
    
    Items := []
    For Item In Window.Document.Folder.Items()
      Items.Push(Item)
    
    FocusedItem := Window.Document.FocusedItem
    For Index, Item In Items
    {
      If (FocusedItem.Path = Item.Path) {
        FocusItem := Up ? Items[Index-1] : Items[Index+1]
        Window.Document.SelectItem(FocusItem, 0x15)
        Break
      }
    }
  }
}

COMオブジェでやってみたけどSystem32だと数秒フリーズするくらい重い
2017/05/19(金) 17:09:05.50ID:2AN/Hzrs0
>>422
GetExplorerViewMode() {
  For Window In ComObjCreate("Shell.Application").Windows
  {
    If (WinExist("A") = Window.Hwnd)
      Return Window.Document.CurrentViewMode
  }
}

>>425は実用的じゃないんで、表示モードによって送るキーを変えるのがいいと思う
2017/05/19(金) 18:11:11.88ID:PpwfT9pG0
>>424
例外処理にすれば?

func(){
 try {
  if () {
   …
  } else
   throw
 }
}
2017/05/19(金) 21:09:51.49ID:GgHVwYsF0
おお ahkLで try-catch もサポートしてたんやね
横だが知らんかったわ
2017/05/20(土) 21:16:42.42ID:3WOJ7VBV0
RunコマンドでMin起動した場合、RunしたアプリにControlsendが送信されません。
MinでRunしなければControlsendが送信されます。
これはAHKの仕様でしょうか?。
2017/05/20(土) 21:22:48.08ID:eg3beDWD0
コントロール鮮度は前々から話題に上がってるけど、不安定
環境やアプリケーションの相性に大きく依存する
2017/05/20(土) 21:34:22.91ID:D6AV13G70
>>429
手動で最小化したらどうなの?
2017/05/20(土) 22:18:49.76ID:cg5NPQjZ0
Min化した状態でClassNN(or hWnd)ってちゃんと取れてんの?
control指定してないならFocus外れてるんじゃね
2017/05/20(土) 23:23:44.64ID:3WOJ7VBV0
>>430
そうなんですか、知りませんでした。

>>431
手動で最小化後にControlsendしても同様の症状でした。

>>432
Controlsend対象が.NETアプリ何ですけども、コントロールを取得しても無しになってしまいます。
仕方なくウィンドウタイトルのみ指定してControlsendしています。
問題は私にあるのかも知れません。
2017/05/21(日) 00:03:11.61ID:5J23iwUk0
>>433
それならRunは関係ない問題は最小化

*ControlSendの指定が間違っている
*アプリ側が最小化状態でのキー入力に対応していない
2017/05/21(日) 02:11:45.49ID:0HKYOnaq0
>>434
最小化しなければ問題ないので、これでいく事にします。
有難うございました。
2017/05/23(火) 18:52:42.43ID:/z294Xzw0
winuser.h の KBDLLHOOKSTRUCTなど
色々な構造体のサイズを調べたいのですがahkだけでは無理ですか?
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

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