探検


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/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を省略できます、だって
コパイロットよ、どっちなんだい
2024/10/08(火) 07:11:01.64ID:PJm4zAM/0
>>474
何も知らないなら何も言わないほうが良いぞ
馬鹿がバレるから
477名無しさん@お腹いっぱい。
垢版 |
2024/10/08(火) 07:44:51.38ID:a+1T31eg0
新手の荒らしか?
2024/10/08(火) 11:24:24.22ID:g9vwOZ7j0
>>461
その後、色々試したのですが保存ボタンを押せないことが稀にあります
なのでLoopをかけて#32770がまだあったら2秒sleepかけて再度保存ボタンを押すのLoopを5重ぐらいにかけたらほぼノンストップで運用できるようになりました

実コードなど詳しい解説ありがとうございました
2024/10/08(火) 11:29:37.32ID:f7+Mss5f0
CPU利用率が高く処理が追いついてないときにWindowsはマウスやキーボードで行ったユーザー命令を無視する説ですべての説明がつく
2024/10/09(水) 12:32:31.05ID:cX4bOXdE0
これをAHKv2でどうやって実装すればいいじゃろか

直前に入力した単語を大文字にする
https://zenn.dev/vim_jp/articles/2024-10-07-vim-insert-uppercase
2024/10/09(水) 12:59:44.57ID:ljiV3D/d0
How to Describe a Person in English: Phrases For Appearance
2024/10/09(水) 13:47:02.71ID:EDPVs9XS0
>>480
真面目に実装しようとすると AHK だけじゃ無理(のはず)。

"autohotkey get text cursor position" あたりでググるか(多分 v2 でお手軽に
使えるリソースは見つからないと思う。cursesライブラリィみたいな巨大なもの
ならあったかな?)、
https://www.scintilla.org/index.html が使えるエディタ環境なら、SciTE を
DllCall 経由で使う。

「単語単位を適当でいいや」にするなら、"^{Right}"、"^{Left}" で代用。
2024/10/09(水) 14:10:59.27ID:Ni5X0cgM0
>>480
C-lを押すとVim scriptが動くようになってる
AHKv2でSend "^l"とすればいい
ショートカットキーでアプリ側のスクリプトが起動するようにしておく
2024/10/09(水) 15:50:52.36ID:jbkbVU700
AHKV1でtest_で始まる関数を列挙するってできる?

ソースコードをスキャンするというのはなしで

#include込みのすべてのソースコードを合体して文字列配列で取得する方法があるならそれでもいいけど
2024/10/10(木) 01:57:48.90ID:gju2+YZb0
>>480
んーむずかしいかー

とりあえず、
・IMEで文字列を選択して再変換
・普通に選択して置換 RegExReplace("asdf-fdsa-hauhntkl", "s).+", "$U{0}")
・エディタのマクロ
2024/10/10(木) 02:25:42.96ID:FDERPLBs0
>>480
>直前に入力した単語を大文字にする
これは例えばメモ帳使ってる時に実現したい、、、ってこと?
要するに『IMEが日本語入力状態だと思って書き込んだら英小文字が入力されていたので、再入力せずに直前の文字を日本語に直したい ※』
の日本語にするんじゃなく英小文字を英大文字にするってこと?
だとしたらかなり前の過去スレに ※ のv1用コード貼られてるからそれを改造すればいけそう

https://web.archive.org/web/20181230010420/http://anago.5ch.net/test/read.cgi/software/1367725658/
の164-165

ちなみに個人的にこれ改造してv1で今も使ってる(MGLのプラグイン化して)

よく分からずレスしてるんでやりたいことと違ってたらすまん
2024/10/10(木) 12:40:28.96ID:ellHKC8G0
>>480
www.autohotkey.com/boards/viewtopic.php?f=83&t=132338
ちょっと前に見かけたこのライブラリを使えば出来るんじゃないかな? と思って、試しにいじってみたらそれっぽいことはできました
細かい検証とかはしていないので使用上の弊害などは分かりません

#Include XHotstring.ahk
XHotstring.ResetKeys := "{Left}{Right}{Up}{Down}{Next}{Prior}{Home}{End}{Space}{Enter}" ; 適用範囲をリセットするキー デフォルトでは{Space}{Enter}がなかったので追加
XHotstring(":*:(.+)@@", "$U1") ; 任意の文字列入力後、@二度押しで適用範囲内文字列を大文字に変換


>>484
AHKのプロセスメモリ内をスキャンすれば可能かもしれませんが、ソースコードの解析が一番簡単だと思います
Includeファイルについては#IncludeがあればInclude先もスキャンすれば良いだけです
v2なら特定クラス内のメソッドとかであれば列挙可能ですが、スクリプト全体から列挙する方法はv1と同様です
488名無しさん@お腹いっぱい。
垢版 |
2024/10/13(日) 16:38:44.70ID:PDT1mwa30
MPRESSがもうダウンロードできなくなってるけど誰かくれんかね?
489名無しさん@お腹いっぱい。
垢版 |
2024/10/14(月) 03:02:35.98ID:KcUraxAC0
USキーボードのCAPSLOCKキーをIME切り替えにしたいのですが、
CAPSLOCKをF14にした上で

;;;IME切り替え
F14::
send,!{vkC0}
return

で今まで切り替えていたのですが、IME切り替えがよくバグってALTキーが押しっぱなしにされてしまいます。
!{vkC0}を使わずにIME切り替えする方法ないでしょうか?
2024/10/14(月) 09:14:44.58ID:nKp0lMeM0
>>489
ちょっと記憶が定かではないけれど、その手の AHK での修飾キー押しっぱ問題は
AHK側だけでは確実な対処は無理ちゃうかったかな?
(たいてい CapsLock/LCtrl 入れ替えでハマるw)

他のツール類(Change Keyとか)で、通常のキーボードにはないキー(F13~F24)を
CapsLock に割り当てておいて、AHK 側ではそのキーに対する処理にするのが常道とか。

↓あたりでググってみれば、色々参考になるはず。
ahk key押しっぱなし - Google 検索
https://www.google.com/search?q=ahk+key%E6%8A%BC%E3%81%97%E3%81%A3%E3%81%B1%E3%81%AA%E3%81%97
2024/10/14(月) 10:00:54.67ID:/NO+1EDo0
ime.ahk
492480
垢版 |
2024/10/14(月) 15:20:19.95ID:nE+HVhlV0
>>487
おーすげー出来た
発火タイミングはどうすればいい?

大文字にしたかった場合は大抵事後だから
2024/10/14(月) 18:55:17.01ID:EkA47qEQ0
>>488
www.autohotkey.com/mpress/
↑のmpress.219.zip


>>489
{vkF3}か{vkF4}を送ればいいはずです


>>492
発火タイミングと言うのがコードを実行する位置のことであれば
常駐が前提のスクリプトなので通常のホットキーやホットストリングと同様に、事前登録しておくと言う感じです
ただし、それらと違いclassなのでAutoExecute-Sectionに書くか、ホットキー内に書いて手動でやるかして、前もって1度実行されている必要があるだけです
494名無しさん@お腹いっぱい。
垢版 |
2024/10/14(月) 19:00:08.71ID:gcJe/yFu0
>>493
mpressリンクありがとん🥺
2024/10/15(火) 16:22:01.12ID:ORDFOdoA0
パッケージマネージャー出来てた
https://github.com/Descolada/Aris
2024/10/15(火) 16:37:29.80ID:RhyIvNKJ0
>>495
↑
何これ?
2024/10/15(火) 17:10:13.39ID:1PWT48kg0
それはレスアンカーといって、そのレスがどの書き込みに対する返信なのかを明示するための書式です
2024/10/15(火) 18:45:30.71ID:G8EFpNqS0
質問をみるといつも思うのだが他者の労働力を搾取しようとするなとだけ
自分で調べて発表せよ
それが社会貢献
2024/10/15(火) 18:53:18.50ID:0VL5Czli0
>>496
なんの変哲もないgithubのページだから開いて翻訳して読んどき
2024/10/18(金) 22:59:14.66ID:ROfzVtWS0
質問させてください。
Enterを押した後にSpaceを押す機能を右ボタンに割り当てたいのですが、どうすればよろしいでしょうか?

Right::
Send, {Enter}
Send, {Space}
return

Right::
Send, {sc01C}
Send, {sc039}
return

どちらもメモ帳では動作するのですが、アプリケーション上では反応しません。
2024/10/19(土) 09:43:45.73ID:gTKdgegr0
メモ帳もアプリケーションなんですがね
それはともかく入力の受付はアプリごとに制御されているので
例えばinputしか受け付けないとか、高速入力できないように制限してあるとか
様々なケースがあるので試行錯誤するしかない
うまく動作しない謎アプリを晒さない限りそれ以上のことは何とも
2024/10/19(土) 14:41:27.03ID:lTux8SgV0
初心者だよね?
v2から学ぶべき
v1は忘れていい
503名無しさん@お腹いっぱい。
垢版 |
2024/10/19(土) 19:23:02.29ID:zWBtD9Ow0
中身がAHKらしいクリップボード拡張ソフトを使っています。
定型文を入力するために独自のメニューを呼びし、
アクセスキーを使って入力しています。

例 「 挨拶文 (&A) | おはようございます | KeyStroke 」

呼び出したメニューには「挨拶文(A)」と表示され、
「A」を押すと「おはようございます」が出力されます。

動作自体は思い描いた通りなのですが、
アクセスキーである「(A)」もメニューに表示されるのを邪魔に感じています。

この「(&A)」の部分を「アクセスキーとして機能するがメニューでは非表示にする」
という方法があれば御教示いただけないでしょうか。
御存じの方がいらっしゃればお願いします。
2024/10/19(土) 20:06:36.72ID:rU9ISZOb0
英語なら&AisatubunでAに下線がつくだけで困らない
2024/10/20(日) 15:30:16.04ID:6yZvlGCd0
>>503
ClipboardHistoryのメニューはWin32 APIのTrackPopupMenuを直接DllCallで呼び出して作成されていますが
AHKの標準メニューも内部的にはTrackPopupMenuExを利用して作成されており
アクセスキーの指定やアクセスキーが下線が付いた文字として項目に表示されるのはAPIの仕様となります

アクセスキーは別データとして保持されているような物ではなく、項目名から動的に割り当てられるため
項目名から該当文字(&Aなど)を消すとアクセスキーとしては機能しなくなります
したがって、「アクセスキーとして機能するがメニューでは非表示にする」と言うのは仕様上両立できません

メニューの指定項目を選択できるようなホットキーを作成するか、別途メニューっぽいGUIを自作するなどすれば可能ではありますが
ClipboardHistoryの範疇から外れプログラミングの話になる上、どちらも簡単に出来ることではないですし労力に見合うとも思えません
506名無しさん@お腹いっぱい。
垢版 |
2024/10/20(日) 18:38:03.74ID:pWjFMDrG0
>>505
詳しくありがとうございます。
目的の内容は実現できないことが分かったので諦めます。

奇妙な要望だと思われたかもしれませんが、
実は定型文のメニューを整形して(余分な空きを作って)、
格子配列の自作キーボードの物理配置と
定型文のメニューを視覚的に統一する方法を試しているのです。
これだと「アクセスキーは必須だが表示されると邪魔」になります。

動作的には全く問題ないので、
アクセスキーを小文字にするなどして気にしないようにします。

しかしソフト名の指摘もズバリでしたね。
クリップボード拡張ソフトは(PC歴約25年の間に)殆ど試しましたが、
ClipboardHistoryより優れたものは見当たりません。
作者さんに感謝しながら末永く愛用して行きます。
2024/10/20(日) 20:12:03.65ID:NnL5zIl20
autohotkeyの方が作者は存命だっけ? どっちだっけか
2024/10/20(日) 21:39:58.59ID:OVpuB1UH0
「ズバリでしたね」って回答者に対して逆に失礼だわ
たまたま知識と勘が鋭いから当たっただけで
本来は質問者がはっきりと、これこれこういうアプリでと名称を記載すべきなんだよ
クイズやってるんじゃないんだからさ
2024/10/21(月) 16:14:22.17ID:itWjFkQN0
> www.autohotkey.com/foundation/
> オートホットキー財団
> 2014 年 4 月 24日に米国インディアナ州で設立
> 財団のマネージャーは、Charlie Simmons (tank)、Steve Gray (Lexikos)、Joachim de Fourestier (joedf) で、Chris Mallett (ソフトウェアAutoHotkeyの作成者) が指導しています

> github.com/AutoHotkey/AutoHotkey/commits/
> Jun 23, 2024 Lexikos
最新のコミット6月

> github.com/AutoHotkey/AutoHotkey/graphs/contributors
コミット数1位 Lexikos 3,906 commits
2位 fincs 100 commits
3位 JackieKu 85 commits
510名無しさん@お腹いっぱい。
垢版 |
2024/10/21(月) 18:04:15.39ID:ahR5PPfN0
>>508
下手にソフト名を書き込むと「宣伝」とか言われて
作者様に迷惑を掛けるかもしれないと思って自重しました。
二回目の書き込みは回答者様が確信を持って書かれていたので、
もうソフト名を隠す意味も無いと思いました。
クイズのようにスレッドの皆様を軽んじる意図は全くありませんので、
不快に感じたなら配慮が足りず申し訳ない。
2024/10/21(月) 18:29:08.01ID:aSze+Blp0
死んだらいやだな
2024/10/22(火) 11:24:57.05ID:ZS6EXbji0
>>510
木にすんな
厭味ったらしい書き方でいうなら >>508 の方がずっと底意地が悪い
2024/10/22(火) 11:54:57.12ID:gM/80aqV0
>>35
順番入れ替えてもおなじですか?
2024/10/24(木) 02:07:08.83ID:fvQei37C0
Clipboard Historyの話題が出たので、Runコマンドの外部プログラムとの連携について備忘録

pythonで文字列操作する場合
|| Run | python.exe ".pyのpath" | I O

pythonは、argparseを使わず、sys.stdin.readline().strip()で標準入力読み込みになる。

pyに入力が渡らずけっこうハマった。
Clipboard HistoryとAHKとの連携は、基本AHK側で処理してやりとりはファイル入出力した方が確実だった。
2024/10/24(木) 22:10:23.38ID:UIMUUpQt0
同じホットストリングをIME状態で分岐したいのですが、IME ONだけうまくいきます。
OFF時はどうやって書けばよいですか?

#if !IME_GET(1)
:*?:/11::""{Enter}{left 1}
#if

#if IME_GET(0)
:*?:/11::""{left 1}
#if
2024/10/24(木) 22:10:48.54ID:VLsa+vNJ0
autoclick:
if !(WinActive("ahk_id" . actWin) && (A_TimeIdlePhysical < 50 && !mouseMoved))
{
ControlSend, , 3, ahk_id %actWin%
; Send directly to Digit3 to the window.
cx := xp%currentClick%
cy := yp%currentClick%
ControlClick, x%cx% y%cy%, ahk_id %actWin%,,,, NA
currentClick := % Mod(currentClick + 1, totalClicks)
}
return

↑ これで後半5行目の ControlClick はちゃんと機能する、
ゲームのウインドウが 裏側になっても ひっそりと左クリック連射してくれる。
しかし、手前の1行目の ControlSend は機能してくれない。
ゲーム Windowが背面に行ったら、その時点で 3 キーがちゃんと送られなくなる。
どこが間違っているのかわからん!なんでや!
2024/10/24(木) 22:11:40.50ID:ElSGbcVY0
alt+xで無変換が出来なくなってしまいました

;;;altとXで無変換
SetKeyDelay, 0
!x::
SendPlay,{vk1Dsc07B}
return

何か足りないのでしょうか?
よろしくお願いします。
2024/10/24(木) 22:13:46.74ID:ogkMQ6UV0
HID Macros と Autohotkey を連携させようとしていて、
テンキーの+と-を、CtrlとAltoに割り当てようと考えています。

If ( tkey1down ) { ; Numpad1キーが押されているなら
If tkey16down ; Numpadsubキーが押されていれば
tkey1down := HoldDownKey2(tkey1down, "ctrl")
Else If tkey17down ; Numpadaddキーが押されているなら
tkey1down := HoldDownKey2(tkey1down, "alt")
Else ; どちらも押されてなければ
tkey1down := HoldDownKey2(tkey1down, "")}
と記入したところ、
「Error: Too few parameters passed to function.」
と出て、これだと3行目に→があります。

「HID Macros と Autohotkey を連携させる」のサイトを参考にしました。
Else If が、このようには使えないのでしょうか?
すいませんが、教えてください。
2024/10/24(木) 23:38:25.83ID:7NTt7BQj0
>>515
; IME On
#HotIf IME_GET() = 1
2024/10/25(金) 12:54:55.55ID:YNvUvHS90
#IfWinActiveで
Chrome YouTube
Firefox YouTube
こんな風にYouTubeで別の操作をしたい場合(例え話)
複数の条件を指定する方法を教えて欲しいです
調べた感じ論理演算子などは使えないみたいなんですが
2024/10/25(金) 13:12:23.99ID:iV6NPiWJ0
説明不足で意味がよくわからんけど
二つのブラウザで分岐させたいの?
2024/10/25(金) 14:18:53.43ID:fJbwAcE00
v2でIfWinActiveは削除された
#HotIfのクイックリファレンスにorが出てきたのはどう?
://ahkscript.github.io/ja/docs/v2/lib/_HotIf.htm
v1は手元にない
2024/10/25(金) 14:28:15.21ID:fJbwAcE00
言ってなかったけどクイックリファレンスで検索したらたいてい解決するw
2024/10/26(土) 17:14:17.46ID:0sWrnwL20
質問です。
ホットキー指定で~をつけると、イベントを乗っ取らずそのままシステムに通しますが
その後の処理で、システムに通さないよう分岐する方法はありますか?

イメージは以下のような感じです

~RButton Up::
MouseGetPos, mx, my, hwnd, ClassNN
if ( ClassNN <> "ListView321" )
return ; そのままシステムに通してなにもしない

; 以下コンテキストメニューを表示してシステムに通さない
2024/10/26(土) 17:48:36.53ID:f/FyL4ZB0
普通に ~ を外して if と else で分岐させればいいだけでは?
条件一致で RButton Up を送信する
2024/10/26(土) 21:42:35.85ID:VsCTIMnu0
範囲選択してスクリーンショットするアプリを使用しています。
左クリックのドラッグで範囲選択をします。

実現したいことは、「トリガー押下→範囲選択モードに移行(アプリ側でPrscに当てています)
→隣のモニタにカーソルを移動→範囲選択が終わり次第、トリガー押下時の座標にカーソルを戻す」
です

今回の質問は、下記スクリプト内の「条件式」のアイデアについてです。

試したことは、
・KeyWaitでLButtonのDownとUpを検出→LButtonの判定がKeyWaitに吸収されて範囲選択できない
・WhileとGetKeyStateの入れ子をうまいこと組み合わせる→よくわからないけど失敗

範囲選択モードになったことを示すものはないとして、マウスの挙動、つまり「ドラッグ選択が終わった」ことを認識できるような
条件式のアイデアを頂ければと存じます。
Send, {PrintScreen}

;初期座標記録&隣のモニタにカーソル移動
MouseGetPos, oldMouseX, oldMouseY
MouseMove, (oldMouseX < 0 ? A_ScreenWidth : -A_ScreenWidth), 0, 0, R

;範囲選択が終わるまで待機
While (1) {
;条件式
break
}

;元の座標に戻る
MouseMove, oldMouseX, oldMouseY, 0
2024/10/26(土) 22:43:09.51ID:TWNlTM+70
while GetKeyState("LButton", "P")
continue
2024/10/28(月) 21:04:27.22ID:oZWBqLfk0
エクスプローラーで選択中のファイルが、特定の拡張子だったときだけサクラエディタで開きたいのですが、うまく動いてくれません。
どうすればよろしいでしょうか、、、

#ifWinActive ahk_exe explorer.exe

;ctrl+Eでサクラエディタで起動
^e::

Send, ^c
Sleep,100
if ( %Clipboard% = "*.拡張子" ){
Run, C:\Program Files\sakura\sakura.exe %Clipboard%
}
else{
Send, ^{e}
}
return

#ifWinActive
2024/10/28(月) 22:44:52.71ID:kFEw7C+t0
初心者だよね?
v1はプログラミングに向いてないからv2を使ったほうがいい
2024/10/29(火) 00:42:08.82ID:4RMka5+D0
>>526
keywaitとgetkeystateを組み合わせる
;範囲選択が終わるまで待機
While (1) {
;条件式
keywait, lbutton, t1
if errorlevel and !getkeystate("lbutton")
break
}
531名無しさん@お腹いっぱい。
垢版 |
2024/10/29(火) 18:35:33.51ID:sPxkJTnl0
V2でControlGet系がうまく動かないのですが、V1からコントロール指定の方法が変わったのでしょうか。

ControlGetHwnd("Edit1")
なら動きますが、
ControlGetHwnd("Edit1", "ahk_exe notepad.exe")
のようにウィンドウ指定を追加すると動きません。
WinGetID("ahk_exe notepad.exe")はちゃんと動いているようです。

お知恵をお借りしたく…
2024/10/29(火) 18:41:19.85ID:hnPx1uMc0
V1で挫折した〝2ストロークキー〟の再現、V2でチャレンジもワイには実現無理そうだ
2024/10/29(火) 19:06:03.91ID:Kw+83trt0
>>531
どっちも動く
2024/10/29(火) 19:11:41.70ID:YI7RT2/i0
>>531
Changes from v1.1 to v2.0 | AutoHotkey v2
https://www.autohotkey.com/docs/v2/v2-changes.htm
ControlGet - Syntax & Usage | AutoHotkey v1
https://www.autohotkey.com/docs/v1/lib/ControlGet.htm#Hwnd
ControlGetHwnd - Syntax & Usage | AutoHotkey v2
https://www.autohotkey.com/docs/v2/lib/ControlGetHwnd.htm
> Examples
> Retrieves the unique ID number of the Notepad's Edit control.
> editHwnd := ControlGetHwnd("Edit1", "ahk_class Notepad")
535名無しさん@お腹いっぱい。
垢版 |
2024/10/29(火) 19:16:49.70ID:sPxkJTnl0
>>533
ありがとうございます。
GetWinIDと同じ文字列を入れてもControlGetはヒットしないです…。
WindowSpyで調べてはみたのですが…。
536名無しさん@お腹いっぱい。
垢版 |
2024/10/29(火) 19:27:49.29ID:sPxkJTnl0
>>534
Hwnd用の変数に代入していますが、try catchでエラー側になるので関数の実行自体に失敗しているようです。
2024/10/30(水) 04:01:24.86ID:9hEpcvqU0
>>536
どこで何のエラーが起きているかは調べたんでしょうか
2024/10/30(水) 22:57:19.40ID:4Rqbhdzu0
v1
実行中のスクリプトを終了させるけど常駐は抜けない方法はないんですか?
一時停止したところから再開するPauseではダメです
2024/10/30(水) 23:55:03.62ID:pVOkQIaJ0
日本語でおk
2024/10/31(木) 06:34:01.22ID:z6U5GiBJ0
実行をしないけど実行するスクリプトを書きたいんだよ
■ このスレッドは過去ログ倉庫に格納されています

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