探検


AutoHotkey スレッド part34

■ このスレッドは過去ログ倉庫に格納されています
2024/06/30(日) 02:12:16.24ID:JUH7aQw10
■公式サイト
https://www.autohotkey.com/

■解説等
・v1.1
AutoHotkey Wiki
http://ahkwiki.net/Top

・v2
クイックリファレンス|AutoHotkey v2
https://ahkscript.github.io/ja/docs/v2/
v1.1からの変更|AutoHotkey v2
https://ahkscript.github.io/ja/docs/v2/v2-changes.htm

■前スレ
AutoHotkey スレッド part33
https://egg.5ch.net/test/read.cgi/software/1705995058/
2024/08/25(日) 20:58:14.60ID:NK9fmonF0
>>375

インスタンス変数のリネームができないとは?
2024/08/25(日) 21:06:20.41ID:IcAHQZ7i0
>>376
ローカル変数とスタティック変数はF2キーで関連箇所を一括で名前リファクタリングしてくれるんだけど、インスタンス変数の場合はなぜかそれができない
2024/08/25(日) 23:07:58.12ID:NK9fmonF0
>>377
あー、ほんとだね

staticのメンバ変数はリネームできるのにね…
2024/08/25(日) 23:41:50.36ID:/7nYgjKm0
>>378
https://github.com/thqby/vscode-autohotkey2-lsp/issues/423
インスタンス・プロパティを見つけるには、すべての変数の型を導出する必要があるが、変数は複数の型を持つことがある。
380あぼーん
垢版 |
NGNG
あぼーん
2024/08/27(火) 13:34:37.39ID:7qGzub9y0
>>380
サンクス
382名無しさん@お腹いっぱい。
垢版 |
2024/09/08(日) 10:24:21.27ID:mbjS21UP0
個人PCなんだけど、autohotokeyって管理者権限と一般ユーザー権限のどっちで起動するものなの?
両方使ってて、使い勝手に違いは感じられない
2024/09/08(日) 11:04:44.42ID:7HwO3Ozo0
使い方による
管理者権限で動いてるアプリのコントロールを触るなら管理者権限いる
2024/09/08(日) 11:54:46.95ID:+IY41lf50
危ないという噂があるから危ないことはしない
何重にも備えるべき
2024/09/08(日) 21:30:36.63ID:A+ZxWoZi0
各種サイトでglobal多様せず汚すな的なこと書いてあるけど、上級者的にはglobal := Map()でDBみたいに一元管理するのはおすすめしない?
2024/09/08(日) 21:41:02.69ID:pb61UfPY0
最初から全部、自分一人の管理下てコードを書いているなら
それはご自由にって感じなんだけど
結局は解放されないとか、よそからのライブラリの取り込みなんかで
誤動作するから、大抵のサイトで避けろと書かれているんだと思うが
2024/09/08(日) 23:07:40.77ID:AwoA2yv90
使用目的がWindowsAPIで使う定数とかであるなら、globalでも支障はないと思います
AHKで個人で使うスクリプトぐらいの開発規模だとglobal変数を使用しても、把握しきれないと言うことはあまりないですが
上で言われているようにどっかで拾ってきた他のライブラリ内の変数名と被る可能性があるのが一番の問題となるので
global変数を使うよりも、DB用のクラスを作ってそれのstaticプロパティとやり取りするほうが無難かなと思います
もしくは、クラス内で完結できる内容ならそう作る方がより良いと思います
2024/09/08(日) 23:39:10.00ID:3OaZnQc90
データのバックアップみたいなもんで、問題が起きたことのない人が面倒なだけに思うのはわかる
2024/09/08(日) 23:58:03.69ID:EJksm7zC0
宣言個所や使用箇所同士を近くしないと、コードを修正するときに困るでしょ
・コード削除で使われなくなっても変数が放置される
・変数がどこで使われているのかわからず、値変更や削除をしていいか判断できない
ゴミ変数がどんどんできて、しかも、ゴミかどうかの判断すらできない状態にすぐなる
2024/09/09(月) 11:35:50.28ID:VrkaXQ2i0
> DB用のクラスを作ってそれのstaticプロパティとやり取りするほうが無難
すげーーこんな使い方あるのか!
classはよくわからず避けてきたけど一時と恒久の2種類扱えるDB作ってみる
https://github.com/thqby/ahk2_lib/blob/master/SQLite/CSQLite.ahk
2024/09/09(月) 12:40:12.21ID:7DV4cvxS0
classは名前がかぶるとエラーが出る
global変数は名前がかぶってもエラーが出ない
2024/09/09(月) 21:25:23.31ID:hlw0c20n0
座標軸をx,yでglobalに格納しているようなやつがたまにあるけど
ああいうの見ると恐ろしくなるね
2024/09/14(土) 18:47:12.30ID:D48CtUpU0
初めてclass作ったけど
おじさん達が「classはスカートの丈じゃ。長すぎても短すぎてもいけない」とか言ってる意味がやっとわかったよ
2024/09/15(日) 19:50:00.48ID:fUvoWpAS0
環境
Win10Pro64bit
AHKv1
NeverwinterNightsっていう古いゲーム

sc7B & q:: m ;; map
で無変換+q呼び出すと
mが押されてマップが表示されつつ
qも押されて左移動してしまう
こんな挙動するアプリって今まで見たことないんだけど
何か対処法ある?
2024/09/15(日) 20:06:05.91ID:25mPuJUO0
v2ならsc7B & q::send "m"を試す価値あり
2024/09/21(土) 10:25:50.84ID:+1Aedhid0
qは~qと書いておくべきでは?
2024/09/22(日) 12:12:37.82ID:kO3DiDhw0
最近v1からv2に以降しておおむね満足、なんだが…
webブラウザでズームが簡単にできるようにhotifで対象限定しつつMButtonをContorolにリマップしてる状態で
他のアプリでホイールクリックしたときにContorolのキーダウンだけ発行されるときがあってえ?てなった
ホイール押し込みながらホイール回転の二つをそれぞれリマップするように変えて回避はできたがなんかもやっとする
2024/09/29(日) 16:50:20.12ID:zqsiEfqj0
sendでControlのDownとUpを書いてその間にホイール操作を書かないと結局不具合出たわ
まあv2にして困ることはないでFAかな
2024/09/29(日) 17:37:16.05ID:FrKuG+9e0
v2でsendのデフォルトモードがinputに変わったせいで、移植の際に
思わぬ不具合が出ることがある
元のv1のソースを読み解いて、v2側で適宜正しいモードで指定すれば
きちんと動作するようになるが、気づかないと沼る羽目に
2024/09/29(日) 17:43:44.15ID:NR3WdkDN0
>>399
どういうシチュエーションで不具合?
具体的に
2024/09/29(日) 17:55:01.87ID:FrKuG+9e0
そうねえ、最近だと連射系のスクリプトかな
eventだとキー1回ごとに処理されるから連射停止に即座に反応するんだけど
inputだと高速連射させるとアプリとCPU負荷の状態によってはによっては入力しっぱなしになる
フォーラムを色々見てみたら、割とあるみたいで連射はeventで書くのが暗黙らしい
2024/09/29(日) 22:16:10.34ID:NR3WdkDN0
>>401
そうなんだ
連射とかやらないから遭遇してないわ

今のところ、v2で困ることはないな
2024/09/30(月) 03:23:02.42ID:sWki31Ev0
まだv1使ってるの俺だけ?
v2の挙動分からなくてスクリプト用にずーっと使ってる
2024/09/30(月) 03:40:26.95ID:dXZf0Qg/0
Windowsの使い方にもよるんじゃない?
以前に作ったスクリプトで事足りてるからv1のまま使ってる
スマホやタブレットを使う比率が高いかもしれんけど
2024/09/30(月) 06:03:36.77ID:LOS0OEEa0
AutoHotkeyの使い方5ーウィンドウ・ソフトごとに動作を変えるー | 生焼けプログラマーの雑記帳
https://namayakegadget.com/643/#toc13
長年使っていながら気付かなかったこの挙動
これでようやく眠れる
2024/09/30(月) 10:54:11.72ID:B6OgheLw0
石破が数学とか物理はそもそも問題が理解できず白紙答案と言ってたけど
gendai.media/articles/-/138296
頭が固い文系脳なんじゃねーの?
2024/09/30(月) 11:02:04.98ID:GcmeQ9l90
MouseGestureL使ってるからまだv1
2024/09/30(月) 15:07:00.91ID:LtmJV+xI0
>>407
お前はオレか!?
2024/09/30(月) 15:29:16.61ID:ripDtC5Y0
MGLはフォーラムでユーザーの一人に手伝うからv2に移植してくれと言われて、
今の作者がv2にするつもりはないと断ってたからな
前任者から引き継いだソースがベースで、すべて自分が掌握しているわけではないから、
分からんでもないが、v1がいつ唐突にサポート切られるか分からんし
裏で移植を進めていることを願いたい
2024/09/30(月) 19:21:20.59ID:PF1hAvOv0
v1からv2へ移行したけど
手持ちのまあまあの大きさのスクリプトの移植はコンバータを使ってもちょい大変ではあった
2024/09/30(月) 19:44:16.46ID:jvQxSkbk0
NGLで手伝い申し出た人いたっけ。まあ、作者がv2対応を考えていないなら同じことか
Clipboard Historyも使ってるし、これらを自力でv2仕様にできるとはとても思えんから、まだ当分v1だなぁ
いつの間にかvectorに復活してたenthumbleくらいのならどうにでもできそうというか、
あれをわざわざ使わなくてももっと自分好みにしてるが…
2024/09/30(月) 20:20:03.96ID:VJjKz+c40
>>410
コンバーターって有料のしか見つからないんだけど無料のある?
2024/09/30(月) 20:35:58.71ID:PF1hAvOv0
>>412
https://github.com/mmikeww/AHK-v2-script-converter
私が使ったのはこれですが
説明にある通りある程度自力での修正が必要とされる
2024/09/30(月) 22:04:14.67ID:bByHvbp/0
>>413
というか、
かなりの修正が必要ですね…
2024/09/30(月) 22:06:00.97ID:bByHvbp/0
>>412
有料って?
Quick AHKv2 Converter?
2024/09/30(月) 22:11:51.18ID:M1bCViDB0
>>407
お前はオレか!?
2024/09/30(月) 22:27:30.37ID:3qcKV69w0
つーか、自作のスクリプト類を v1 → v2 に完全に置き換えるとかってのでもない限り、
AHK の v1 と v2 の両方をインストールしときゃそれでおk ちゃうか?
2024/09/30(月) 23:21:41.37ID:1fWbsl/T0
拙者は自作のスクリプトの規模がまだ小さいうちに移行すべきと判断しました
古参の方は大変ですな
2024/10/01(火) 01:44:06.80ID:HV37rj8W0
>>415
それです
>>413は知らなかった

WinGetTitleでタイトルの取りこぼし多数あるんでv2に移行すれば幸せになれるかな?と思ってるんですけど移行面倒臭すぎて

併用試してみます
2024/10/01(火) 12:44:42.33ID:lRpho0BS0
取りこぼしって、AHKの潜在的なバグじゃなくて
正規表現の記述の甘さなんかくるフィルタリングの問題じゃなかろうか
2024/10/01(火) 13:19:54.22ID:dwrWdzvE0
>>420
ブラウザのタイトル取得してクリップボードに入れてるんですけど5%ぐらいの確率で空になってしまいます
2024/10/01(火) 13:25:15.33ID:5grOXHgQ0
>>421
空の場合にもう一度繰り返す処理を入れればいいだけ
2024/10/01(火) 13:31:16.12ID:2QxI47PG0
確率とか言ってないで再現性の検証しなよ
2024/10/01(火) 13:36:09.34ID:lRpho0BS0
>>421
タイトル取得かクリップボードへの送信のタイミングが早すぎるのでは?
各アクション間に200msくらいウェイト入れて様子見てみるといい
問題なければ100msくらいに下げてまた様子見る
2024/10/01(火) 13:43:42.86ID:lRpho0BS0
一応、念のために書いておくけど
ウェイトってsleepのことね
2024/10/01(火) 14:40:50.95ID:FvxXaQDC0
ウェイト(sleep)を知らない人いるのかなっていう気もするがいるんだろうな
AHKはあらゆる場所でsleepを入れないと正常に動かない
1行ごとにsleep(1秒)を入れれば安定するが遅くなるジレンマがある
これは仕様
2024/10/01(火) 14:45:22.15ID:FvxXaQDC0
> Send "abcdefghijklmnopqrstuvwxyz"
> MsgBox "msg"
> 途中までしか送信が入力されないアプリがある
> おかしい

前に投稿したレスだがSendでさえ正常に動かない
2024/10/01(火) 14:52:55.41ID:HmNXYxxa0
>>426
sleepって全体巻き込んで止まるイメージあるから使おうって発想なかったわ
2024/10/01(火) 15:08:03.86ID:dwrWdzvE0
>>422
ブラウザから取れない時はURL返すからそれ以外になったらループ抜けてねってやってる
空白処理入れたら無限ループみたいな症状出て昔鬼ごっこしたけど諦めた
仮想マシン上でやってるんだけど全く出ないマシンと出まくるマシンあって意味分からん

>>424
sleep,4000入れてる
2024/10/01(火) 15:26:59.62ID:lRpho0BS0
直接の原因でないにしろ、4000って入れすぎでしょ
2024/10/01(火) 15:58:35.70ID:qvg844/u0
4秒止まったらストレスになりそう
2024/10/01(火) 16:57:41.65ID:oBJ+4kyU0
単にこういうことじゃないの?
v2 だと try catch で WinGetTitle のエラーハンドリングはできるけど。

WinGetTitle - Syntax & Usage | AutoHotkey v1
https://www.autohotkey.com/docs/v1/lib/WinGetTitle.htm
> Remarks
> If there is no matching window, OutputVar is made blank.
2024/10/01(火) 17:17:10.42ID:dwrWdzvE0
>>430
元々500で駄目だったからどんどん伸ばしてった

>>432
ブラウザ開きっぱなしで新しいタブでページを開くだからブラウザが無いことはありえないんだけど何故か見つからないことになってしまってるのかな
422さんの言うように空の場合またループに戻すことやってみます
2024/10/01(火) 17:57:05.29ID:AxKysytZ0
WinGetTitleの前にWinExistとかでチェックはしていないですか
してないならば、WinExistで見てみることで何かわかるかもしれないな
2024/10/01(火) 18:07:44.77ID:C+MHvTF60
>>419
WinGetTitleの取得の成否にSleepの有無は関係ないかと思います
必要な情報がないので推測ですが、WinGetTitleの取りこぼしと言うのはウィンドウが見つからないとか取得に失敗しているのではなく
タイトルのない別のウィンドウを取得しているだけだと思います

AHKのウィンドウ指定では条件に当てはまるウィンドウが複数存在する場合、Z-Orderが若い方が優先され対象となります
ブラウザがChromeやEdgeであれば、ポップアップウィンドウのクラス名と実行ファイル名は同じになるので
例として、F1:: MsgBox(WinGetTitle("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe"))
のような指定では実行時にコンテキストメニューやマウスオーバーによるツールチップのようなポップアップウィンドウが存在する場合、そちらが優先されるので、結果は空文字になります
これを回避するためには、WinGetListで該当するウィンドウのHwndを全て取得した後、ウィンドウスタイルで絞り込むなどの方法が必要になります

ついでに、ウィンドウ指定について述べておきますが、Chromium系のクラス名は通常「Chrome_WidgetWin_1」であるため、クラス名のみの指定では他のアプリがヒットする可能性があります
また、>>405で紹介されている所のようにahk_exeだけの指定では、DetectHiddenWindowsがオフであっても、アプリによってはサイズが0,0のサブウィンドウが存在したり
マルチプロセスによるウィンドウ内ウィンドウがヒットしたりする可能性もあるため、注意が必要です
具体例として、エクスプローラーの指定が"ahk_exe explorer.exe"では正常に動作しませんが、これはタスクバーとProgram Manager(デスクトップ)もexplorer.exeによるウィンドウであるためです
2024/10/01(火) 18:08:30.09ID:C+MHvTF60
>>426
あらゆる場所にSleepがないとまともに動作しないなんて仕様はありませんし、Sleepが必要な場合はほとんどがAHK側の問題ではなく、アプリ側またはシステム上の問題です
また、Sleepが必ずしも動作の安定に繋がるとは限りません
0以上のSleepが実行された場合、CPUのタイムスライスの割当てが次のスライス以降となるため、AHKに限らず他のスレッドによる割り込みが発生しやすくなり
コードの実行結果が一定ではなくなるなどの可能性が出てくるので、動作上でSleepが必要な場合は明確な意図と効果を伴って使用すべきです


>>427
おそらくアプリ側のメッセージ処理か入力処理の問題なので、とりあえず
SetKeyDelay(, 50)
SendEvent("abcdefghijklmnopqrstuvwxyz")
で入力が正常に行われるか試してみてください
2024/10/01(火) 18:14:22.46ID:lRpho0BS0
>>433
話を総合すると、仮想環境で動かしているにしてもだよ
500msのsleepで動かなくて、4000msだと95%の確率で動くってことでしょ
どういうコード書いているのか知らんけど、ちょっと挙動がおかしいよ
2024/10/01(火) 18:20:25.22ID:dY8/Ql770
クリップボードの中身を監視したら?
2024/10/01(火) 18:43:44.20ID:dwrWdzvE0
>>435
詳しい解説ありがとうございます
ブラウザはPale moonと言うfirefoxベースのブラウザです
ツールチップ不具合身に覚えあります

WinGetList試してみます
2024/10/01(火) 19:42:28.90ID:osCUHTkq0
>>439
もしかして、最近のアップデートで?

AHKじゃなく、Firefoxの問題
2024/10/01(火) 20:38:22.05ID:C+MHvTF60
>>439
Pale Moonは使用してないので正しいか分かりませんが
FireFox系ならメインのウィンドウクラスは「MozillaWindowClass」
ポップアップウィンドウのクラスは「MozillaDropShadowWindowClass」なので
WinGetListを使わずともクラス名まで指定すれば区別できると思います
逆にクラス名で指定しているにも関わらず、タイトルが取得できないことがある場合は別の所に原因があります
2024/10/01(火) 21:19:00.80ID:HV37rj8W0
>>440
いえ前からです

>>441

WinGetTitle,palemoontitle,ahk_class MozillaWindowClass,
WinActivate,%palemoonTitle%
2024/10/01(火) 21:19:20.25ID:HV37rj8W0
ごめんなさい書き直します
2024/10/01(火) 21:23:50.57ID:HV37rj8W0
途中で誤爆すみません

>>441
今はブラウザにアドレス送ったあとで4秒待ち、
WinGetTitle,palemoontitle,ahk_class MozillaWindowClass,
WinActivate,%palemoonTitle%
でタイトル取得、
Ctrl^sを送ったあとで4秒待ち、
WinGetTitle,savetitle,ahk_class #32770,
IfInString, saveTitle,Save
でSaveが含まれた保存ダイアログが出てくるのを待ち、Enterキー送ってます
2024/10/01(火) 22:11:08.20ID:C+MHvTF60
>>444
palemoonのウィンドウタイトルが取れていないのではなく、ダイアログ待ちで別のダイアログがヒットしているような気がします
とりあえず、開いたウェブページを保存するという挙動で良いのであれば、以下のような方法で良いと思います
F1::
; Run, %URL%
; ここにSleepを入れるか、完全にページの読み込みを待つのであれば、ImageSearchかブラウザ系のライブラリ、またはAccかUIAなどのライブラリを使用する必要があります
ControlSend, ahk_parent, ^s, ahk_class MozillaWindowClass
WinWaitActive, Save ahk_class #32770 ahk_exe palemoon.exe ; 実行ファイルがpalemoon.exeではない場合変更してください
; Send, {Enter}
MsgBox, テスト
Return
446名無しさん@お腹いっぱい。
垢版 |
2024/10/01(火) 23:54:53.14ID:V0wY9dtV0
>>421
ブラウザのタイトルとは、ウェブページのタイトルのこと?

ウェブページのタイトルがセットされるタイミングは固定されていないので、
自分で監視する必要があるよ
JavaScript で動的にタイトルをセットしているウェブページもあるし
2024/10/02(水) 04:36:36.17ID:I/2evcvZ0
>>441
>>445
たびたびコードまで書いてアドバイス頂きありがとうございます。
保存先が色々異なるのでそのまま保存だと不都合が出てきてしまいます
WinGetTitleでMozillaWindowsClassで取り、
タイトルが空白で無いこと、Urlで無いこと、前のアドレスと同じでないことをまず確認して
1 Ctrl^s送出
2 4秒後待ってSaveのテキストを含む#32770のダイアログがあることを確認し、Ctrl^cでクリップボードにコピー
3 クリップボードを保存先フォルダ名とクリップボードに結合
4 クリップボードを禁則文字チェック←ここでhogehoge.com/hoge/hoge/などの禁則文字で保存時々嵌まってエラーMsgbox出力
5 禁則文字が無ければCtrl^vとEnterキー送って保存してます

多分2の時にChromeやFirefoxなどのブラウザでタブにマウスを合わせた時にWebpageタイトルが表示される小さなテキストをWindowと勘違いして空白か古いままのクリップボードを返してるだと思います

教えていただいたWinGetListなのですがVer1の場合、WinGetTitleでできませんか?
SpyかけてみたらSaveダイアログはMozillaDropShadowWindowClassではなく#32770と表示されます
こちらがアクティブになってからクリップボード操作やってるつもりなのですが時々コケます

>>446
Webページのタイトルです
でもリダイレクトはありますが途中でタイトルが変わるサイトではありません
リダイレクト対策も兼ねて長めにSleep入れてます
2024/10/02(水) 05:32:28.13ID:Iof94shX0
WinGetListで複数のWindowを全部列挙してウィンドウスタイルでマスクするようにしないと特にブラウザなんかは正しい動作しないぞ
2024/10/02(水) 07:28:11.75ID:bDszAASW0
Chrome なら、拡張機能 AutoControl が使いやすいんだけどね。
JavaScript で記述できるし、ページの読み込みイベントも拾ってくれる。
AHK で4秒待つとか、実現できてもスッキリしないよね。
2024/10/02(水) 13:29:33.86ID:g4durnG80
リマップにしか使ってないけどv2に移行したほうがいいの?
たとえばキー押しっぱなしがなくなるとか安定性が高くなってるなら移行していいかと思ってる
2024/10/02(水) 14:36:41.30ID:Iof94shX0
一部V2にしかない機能もあるので、過去の遺産はV1のまま使い
改修が必要なものや新規に作るものはV2にしてる
2024/10/02(水) 18:00:55.97ID:Nya46nx90
前スレの225は事実
> v2はメリットしかない
> v1のヘンタイ構文は少しでもプログラミング経験がある人なら発狂して精神に異常をきたす
> v2に移行すれば精神が安定してコードを量産するようになる

リマップにしか使ってないなら移行してもメリットはない

スレでこれだけはやめてっていうのがv2を使えばいいのに使わずv1のヘンタイ構文を質問してくること
v1なんか触ってないっていう
2024/10/02(水) 19:08:37.05ID:Za7Y0ZGq0
>>447
ウェブページを保存する際にメインブラウザからURLをpalemoonに渡して(またはその逆)保存しているという使い方をしていると推測します
そうであるなら、まずはWinGetTitleなどのコマンドのウィンドウ指定は全て ahk_class MozillaWindowClass ahk_exe palemoon.exe
のようにクラス名とExe名を併記するように指定してください

以前にも書きましたがFireFox系であればこの件についてはWinGetList + スタイルによる絞り込みは必要ありません
ちなみにv1のWinGetListは WinGet, OutputVar, List, WinTitle という記述になり、OutputVar1のように疑似配列として扱います

そもそもとして、ウィンドウタイトルの取得の目的が保存名に指定するためなのであれば、ウィンドウタイトルを取得する必要はないと思います
保存ダイアログのクラス名が#32770という事はWindowsの標準ダイアログが呼び出されているだけなので、ControlGetText、ControlSetTextなどが使用できます
通常であれば、ウェブページの保存名の初期値は禁則処理された状態のページタイトル + 拡張子がデフォルトなので、変更が必要な場合こちらを取得して改変したほうがスマートです
つまり、WinGetTitleも必要なければ、途中でコピペにウェイトが必要なクリップボードの操作も必要ないので、余計な要因が介入してくるのを減らすコーディングが可能と言う事です
全体の流れとしては下記のように出来るはずです

; Run, [palemoon.exeのフルパス] %URL%
; Sleep, 1000
ControlSend, ahk_parent, ^s, ahk_class MozillaWindowClass ahk_exe palemoon.exe
WinWaitActive, Save ahk_class #32770 ahk_exe palemoon.exe
ControlGetText, save_title, Edit1, ahk_class #32770 ahk_exe palemoon.exe
; 保存先を手動で変更するならここでsave_title内を編集出来るような処理を入れる
; 既存のフォルダがないとダイアログのEdit部分でパス指定できないのでとりあえずMyDocument\ウェブページ\にsave_titleから拡張子を除いたフォルダを作成
FileCreateDir, % save_path := A_MyDocuments "\ウェブページ\" RegExReplace(save_title, "i)\.[^\.]+?$")
ControlSetText, Edit1, % save_path "\" save_title, ahk_class #32770 ahk_exe palemoon.exe
; Send, {Enter}
2024/10/02(水) 19:46:58.04ID:acuRfLjr0
>>452
触ってる人が答えれば良いと思うんだけど、なんでそんなに食ってかかってんだ???
455名無しさん@お腹いっぱい。
垢版 |
2024/10/02(水) 20:51:31.41ID:M9c5GeZ+0
>>450
安定性とかは変わらないんじゃないだろうか
現在使っているv1のスクリプトを編集せず使い続けるだけなら、移行は必要ないと思う

編集・新規作成の必要が生じたときに移行すればよいんじゃないだろうか
2024/10/03(木) 00:16:46.17ID:Jt0Di29D0
>>451
V2にしかない機能とは?
利用価値のあるもので
2024/10/03(木) 00:54:28.74ID:Tz6rTMiT0
UTF8ファイル読み込む時とかBOMの有無とかV1だと制限があった気がする
2024/10/03(木) 01:09:21.08ID:WYl35//N0
>>456
https://ahkscript.github.io/ja/docs/v2/v2-changes.htm
新機能のご紹介
新しいディレクティブ
2024/10/03(木) 02:42:29.78ID:Jt0Di29D0
>>457
そうなんだ

最近v2に移植したわ
BOM付きで
2024/10/04(金) 03:38:03.71ID:NhPmv6xu0
>>453
たびたびありがとうございます
palemoon本体には教えていただいたコードできちんと操作できました
ダイアログへControlGetText,SetTextやコンボボックスの選択はできるのですがボタン押したり、キー送出ができないです
これはSendコマンドでやるしかないでしょうか

ControlSend, ahk_class #32770 ahk_exe palemoon.exe,!y,
これだとAlt+!送られないです
2024/10/04(金) 18:36:12.70ID:V34s0CwZ0
>>460
パラメータの指定が間違っています
ControlSend [,Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]

!yを送りたいと言う事であれば、たぶん上書き確認のダイアログだと思うのですが
この手の確認ダイアログは、アクティブ最前面で表示されるので単に Send, y でも大丈夫なはずです

ControlSendでボタンを押すのであればControlに 「Button1」 などのClassNNか 「はい(Y)」 などのテキストを指定してください
送るキーは{Enter}や{Space}などでも構いません
ControlSendはWin32 APIによるGUI以外では、親ウィンドウに対してしか効果がないですが
Win32GUIの場合、フォーカスが対象ウィンドウの別のボタン等にある場合、大抵はフォーカスがあるボタンが指定したControlよりも優先されて押されます
YesNoダイアログの場合、初期状態では通常はNoにフォーカスがあるのでControlSendを送る前にYesにフォーカスをセットする必要があります

また、いずれにせよWinWaitで対象ウィンドウの出現を待ったほうが良いです
その際に、前に書いた時は省きましたがWinWait系のコマンドはタイムアウトを指定しておいた方が良いでしょう
まとめると下記のようになります。firefoxの部分は書き換えてください

; ファイルダイアログで保存を押した後に
WinWait, 名前を付けて保存の確認 ahk_class #32770 ahk_exe firefox.exe, , 2
if(ErrorLevel){
MsgBox, タイムアウトしました
Return
}
ControlFocus, Button1, 名前を付けて保存の確認 ahk_class #32770 ahk_exe firefox.exe
ControlSend, Button1, {Enter}, 名前を付けて保存の確認 ahk_class #32770 ahk_exe firefox.exe
2024/10/04(金) 19:19:10.83ID:fR4T6nrD0
>>461
また詳しく教えていただきありがとうございます
出先なのであとでチェックします

名前をつけて保存ダイアログにSend,!sを送って保存しようとすると1%ぐらいの確率で保存ボタンにフォーカスが移るだけで押せないことがあるので嵌まってます
教えていただいたWinWaitのhelp見たらWinWaitCloseコマンドあったのでどちらも実装して試してみます
2024/10/05(土) 01:29:49.17ID:ffwymIic0
v2使ってみたらもう戻れないくらい便利です
ぐい周りは感動した
2024/10/05(土) 11:12:03.05ID:wFIatvKw0
指定のアプリ群をグルーピングして、それらだけまとめてキー操作を統一的に扱いたい
こんな要望を実現できるのはV2だけ
2024/10/05(土) 17:46:33.00ID:EvXhaPGA0
v2で文法がマシになったと聞いてドキュメント見たらif文の等価条件が=なのかよ
そこは==だろう
2024/10/05(土) 18:08:10.14ID:ABL2Y4hI0
==は既に使われているし、代入が:=なんだから
別に文句付けるようなことじゃないな
代入が=なら==で分かるけど
2024/10/05(土) 19:45:14.72ID:7uPQ3bfS0
v1もv2も==も等価条件で=と==の用途の違いは同じ
下手に変えるほうが混乱する
2024/10/05(土) 21:04:53.07ID:BfmCDP890
簡単にGUIが作れるからいいね〜
そこに情報いれてデバッグ的なことも
2024/10/05(土) 21:20:26.81ID:ZqQVtnYk0
自分はデバッグにToolTipを多用してるわ
2024/10/05(土) 22:06:03.49ID:Em/TLP060
比較はだいたいCase Sensitiveの==を使っているなあ
それにあわせてNot equalもCase Sensitiveで書くと!==になるが…
2024/10/06(日) 12:24:53.26ID:7QdW2jH00
Enter::
WinClose,A
Return
こういう単純な処理の場合にreturnって必要ですか
472名無しさん@お腹いっぱい。
垢版 |
2024/10/06(日) 12:57:01.02ID:1y8Ea0fn0
コパイロットにautohotkeyでディスプレイ切り替えの質問したらアナログな方法しか教えてくれなかったわ…
DisplaySwitch.exeなんて便利なコマンドあるんじゃねーか。
マイクロソフト製なくせにwindowsコマンド優先しないとか…
俺が学習することを優先したとか言いやがってAIはまだまだだな。
473名無しさん@お腹いっぱい。
垢版 |
2024/10/06(日) 13:00:16.93ID:1y8Ea0fn0
>>471
AutoHotkeyのスクリプトで、単純な処理の場合でもReturnは必要です。Returnはスクリプトの終了を明示的に示すため、スクリプトの動作を予期せぬエラーから守る役割があります。
コパイロットより
474名無しさん@お腹いっぱい。
垢版 |
2024/10/07(月) 00:02:46.97ID:cU7U0bdE0
>>471
必要

1行で書くなら return は不要
Enter::WinClose,A

v2 だと以下のように書けてとてもわかりやすい

```
Enter::{
WinClose('A')
}
```
475473
垢版 |
2024/10/07(月) 08:46:31.72ID:7zfB35Dh0
コパイロットも1行では不要です、AutoHotkey v2では、ブロック構文を使うことでReturnを省略できます、だって
コパイロットよ、どっちなんだい
■ このスレッドは過去ログ倉庫に格納されています

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