AutoHotkey スレッド part30 IDのみ

■ このスレッドは過去ログ倉庫に格納されています
2022/02/08(火) 18:38:19.33ID:UTRGyCNl0
元々がIDのみの表示で番号の始まっているスレを途中から別の表示で乗っ取るのは「背乗り」行為に当たるので、IDのみの表示で進行とします

■配布元
https://autohotkey.com/download/

■前スレ
AutoHotkey スレッド part29
https://egg.5ch.net/test/read.cgi/software/1620768466/

■日本語解説等
AutoHotkey Wiki
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://hdd.s300.xrea.com/ahk/
AutoHotkeyJp(過去ログdatあり)
https://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
https://www6.atwiki.jp/eamat/

■スクリプト投稿
Autohotkey専用うpろだ
https://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
https://pastebin.com/

■その他のテンプレ(5chのURL規制が厳しいのでpastebinに退避しました)
https://pastebin.com/raw/bWipuNmt
2023/10/01(日) 00:44:40.72ID:aO5V046V0
>>606
無変換の単独押しでリピートしなくなる
他はいける
組み込んで試してみなよ
608597
垢版 |
2023/10/01(日) 08:03:39.09ID:5y0E7yg10
>>607
おっしゃっていることがよく分かりません。

私は「無変換」を「修飾キー」として使った上で、
「無変換」単独押しをした時は(Backspaceキーとして)「キーリピート」をして削除し続けて欲しいのですが、
それはできないということでしょうか?
2023/10/01(日) 08:09:26.00ID:vJZ6he//0
>>608
無変換+q をやりたい時にまず無変換キーを押すと思うんだけど、
そこから1秒程度経過してしまったら自動的に削除リピートが始まって欲しいと?
2023/10/01(日) 09:14:16.51ID:jCSy+5iI0
キートップの文字を書き換えたかのように、そのキーを完全に置き換える
どんな組み合わせで押しても置き換わって動作する

という挙動をahkで書くのはなかなか大変だけど、
yamyでは1行だったんだよな
2023/10/01(日) 09:37:27.76ID:1MOKFxYN0
>>608
修飾キーっていうのは単独押しでは作用しないから修飾キーなわけでしょ
例外はWinキーで、これは単独だと離したときにスタートメニューが発動するから成立している
これを無変換に当てはめるとすると、離したときにBSが発動してたらキーリピートになりようがない
だから前のレスで書いたように、押下時間でリピートになったり、修飾キーになったりみたいな
仕組みにする必要がある
ただBSなんかは瞬時に発動してくれないとイラつくだけだと思うんだよね
修飾キーのつもりで押したのに文字が消えたとか誤爆もあるし
612597
垢版 |
2023/10/01(日) 10:23:09.43ID:IXVZWApm0
>>609
その通りです。

>>611
分かりやすい例えをありがとうございます。

私の希望は複雑なコードを書けば実現できそうではあるけれども、実現できたところで誤爆の可能性が高くなるのでお勧めしないということですね。
分かりました。実現できたところで不便そうなので、現在のスクリプトのまま使い続けようと思います。
613名無しさん@お腹いっぱい。
垢版 |
2023/10/01(日) 18:48:40.48ID:MIF/cMMY0
クリップボードに画像ファイルがコピーされた時に、それを開いて画像データをクリップボードに持つようにしたいのですが、どう書くのがいいでしょう?
powertoyでもできたりしますか?
2023/10/02(月) 07:50:12.52ID:Y0OCwQiz0
>>613
正:それを開いて画像データをメモリに持つ
誤:それを開いて画像データをクリップボードに持つ
ということ?

Win10/11 以降の Snip & Sketch/Snipping Tool なら特に何もせんでも
頭36yte分の Clipborad の header/Signature? を読み飛ばしゃ PNG の
画像データがそのまま入ってる。

それ以前の場合はちょっと面倒で、歴史的経緯?でちょっと古い形式での
Windows BMPデータが入っているっぽいので色々と変換せんと、今どきの
BMPデータにならない。
615名無しさん@お腹いっぱい。
垢版 |
2023/10/02(月) 19:37:50.10ID:tI65VkKa0
AHK v2 の fat arrow function は

() => expr

というフォーマットで、式だから 1行しか書けない

() => 123

{} が来る場合は JavaScript のように複数行書けたらいいのにな

```
() => {
a := 123
b := 456
return a + b
}
```

のように

比較的簡単に実装できそうだけど、実装すれば breaking change になってしまう
現状だと () => {} はオブジェクトを返すという意味なので。
JavaScript の場合は、{} が来たら例外的に関数本体として扱われるようになっていて便利だ
2023/10/02(月) 19:38:02.65ID:4IbfaSx20
ahk v1.1です。
エクスプローラーで使用しています。
IME.ahk を使用しています。

文字入力中(名前の変更や検索欄入力)だった場合は、 a
そうでない場合は、+^a のスクリプトにしたいのですが
下記の方法だと文字入力中の判定がうまく出来ないので
教えていただきたいです。

a::
If IME_GetConverting() = 0 {
Send, +^a
}else{
Send, a
}
Return
2023/10/02(月) 19:38:16.12ID:4IbfaSx20
ahk v1.1です。
エクスプローラーで使用しています。
IME.ahk を使用しています。

文字入力中(名前の変更や検索欄入力)だった場合は、 a
そうでない場合は、+^a のスクリプトにしたいのですが
下記の方法だと文字入力中の判定がうまく出来ないので
教えていただきたいです。

a::
If IME_GetConverting() = 0 {
Send, +^a
}else{
Send, a
}
Return
2023/10/02(月) 19:38:30.91ID:4IbfaSx20
ahk v1.1です。
エクスプローラーで使用しています。
IME.ahk を使用しています。

文字入力中(名前の変更や検索欄入力)だった場合は、 a
そうでない場合は、+^a のスクリプトにしたいのですが
下記の方法だと文字入力中の判定がうまく出来ないので
教えていただきたいです。

a::
If IME_GetConverting() = 0 {
Send, +^a
}else{
Send, a
}
Return
2023/10/02(月) 22:31:01.66ID:JWMVaWUA0
>>615
関数の形式で書かせてほしいよね
今でも一応は,で並べて書けるけどループを書こうとすると再帰呼出しになるし
まだ末尾呼び出し最適化がないから、ちょっと気にしながらになるのもなんかな
2023/10/03(火) 17:39:12.06ID:2DNPH3ID0
>>618
あなたがやりたいことは>>581の方法で実装できます
ただし、検索欄等のキャレットは取得できないかもしれないので
その場合は ControlGetFocus でコントロール名を照合するなどの別のアプローチが必要になるかもしれません

蛇足ですが IME_GetConverting() は変換候補ウィンドウが表示されているかどうかを判別しているだけなので
直接入力時や変換未確定(文字列に下線が付いてるだけの状態)時は文字入力中と判断されません
また、IMEの仕様上の問題で別のプロセスから入力コンテキスト(変換中の情報)を取得することはできないので
外部アプリの文字入力中かどうかの判定にはそのアプリに適した様々な方法を試す必要があります
2023/10/03(火) 19:30:40.48ID:759jFrqH0
IME.ahkを有志が一部v2対応してた
https://github.com/kdr-s/ime.ahk-v2/blob/master/IME.ahk

GETとSETのみ
2023/10/04(水) 18:56:24.73ID:tIruFCPa0
重い腰を上げてようやくv2に移行したがv2最高だわ
普通の文法のプログラムが書けるというすばらしさ
v1のサポートさっさと打ち切ってネット上の醜いv1のコード駆逐してほしい
2023/10/04(水) 22:35:25.70ID:kSzEGkao0
>>621
完全版
https://github.com/k-ayaki/IMEv2.ahk/blob/master/IMEv2.ahk
624名無しさん@お腹いっぱい。
垢版 |
2023/10/05(木) 06:02:55.84ID:bWuMkV3d0
>>615 です
関数本体を宣言できる機能が1ヶ月前に v2.1-alpha で追加されたみたいです

書き方は、
() => {}
ではなく、
() {}
こうするらしい
(たしかにこれだと breaking change にならない)

```
SetTimer(() {
MsgBox "5 second timer expired."
}, -5000)
```

使い捨ての関数を宣言したいことはよくあるので便利そう

https://www.autohotkey.com/docs/alpha/Functions.htm#funcexpr

alpha で追加されたことに気づかずに forum で feature request して、
更に実装日を1ヶ月勘違いして数日前に実装されたのかと勘違いして返事してしまった
625名無しさん@お腹いっぱい。
垢版 |
2023/10/05(木) 06:18:36.34ID:bWuMkV3d0
v2-alpha のドキュメント
https://www.autohotkey.com/docs/alpha/

v2-alpha のダウンロード
https://www.autohotkey.com/download/2.1/

v2-alpha のリリースノート
https://www.autohotkey.com/docs/alpha/ChangeLog.htm
626名無しさん@お腹いっぱい。
垢版 |
2023/10/06(金) 01:45:23.21ID:ev1enbnj0
v2.1 の無名関数を試した
AHK の無名関数は、OTB style としての僅かな制約(最初の { で改行しないといけない)があるけど、
それ以外は普通に使える

無名関数がサポートされたことで、言語としての書き心地は JavaScript とかなり近くなった
無名関数が使えると発想も変わるし、多用もする機能なので、
実質的には v2.5 くらいの変化に感じる
2023/10/06(金) 05:15:27.47ID:jYxejNZf0
fat arrowで無理やり書いてたのから開放されるのか
三項演算子覚えたてみたいな見た目になるから嫌だったんだよ
628名無しさん@お腹いっぱい。
垢版 |
2023/10/07(土) 19:31:15.14ID:9zvIUWci0
v2.1 では、unset というもの(JavaScript の undefined のような)が導入された

これまで、引数のデフォルト値などは 0, -1, '' あたりを代入してごまかすしかなかったけど、unset できれいに(普通に)書けるようになった

```
; これまでの書き方
myFunc(a, b := '') {
if b != ''
do something
}

; v2.1
myFunc(a, b := unset) {
if IsSet(b)
do something
}
```

unset 導入に伴い、?, ??, ??= 演算子も使えるようになった

```
obj?.a?.func()
b := c ?? 123
d ??= 456
```

変数を(自分のメモ用に)宣言だけしたいときにも、適当な値を代入する代わりに unset が使える

```
; これは実質的には何も宣言していないのと同じで、この行自体が存在しない場合と等価
a := unset
```
629名無しさん@お腹いっぱい。
垢版 |
2023/10/07(土) 19:32:02.43ID:9zvIUWci0
JavaScript のように a === undefined とは書けず、IsSet(a) と明示的にチェックする必要があるという違いがあるけれど、undefined のようなものが使えるようになった、という話

なぜ IsSet() で明示的なチェックが必要なのかというと、JavaScript の(strict mode の)場合は a という変数が存在して(宣言はされていて)その値が undefined だけど、AHK v2.1 の場合は、a := unset とすると、a という変数自体は存在しないまま
IsSet() は、変数の値が unset かどうかをチェックしているのではなく、変数自体が存在するかをチェックしているからだろうと思う

このことと関連して、デフォルト引数で unset を代入したとき、その引数を他の関数に渡したい場合は次のように書く

```
myFunc(a := unset) {
myAnotherFunc(a ?? unset)
; myAnotherFunc(a) だと、a が unset のとき、a という変数自体が存在しないのでエラーになる
}
```
2023/10/07(土) 19:53:04.05ID:p00Uoc4y0
めんどくさいだけでメリットを感じない
2023/10/08(日) 13:05:54.46ID:SBMAHfMn0
>>628
その辺り一部は2.0.10でも使えて便利
それと別の関数に渡すやつはmyAnotherFunc(a?)でいいのでは

>>630
あったらいいなが自分に来るまでなくてもいいやつなんで
メリットを感じないならスルーで問題ないよ
2023/10/08(日) 13:53:44.85ID:SBMAHfMn0
なんかこれ系使ってるの書いたなと思って探してきた
前にループでRangeを使いたいって話があった後、自分でも範囲指定のが欲しくなったときのやつ

; PythonのRangeみたいなやつ(forで使うことしか考えてない)
Range(start?, stop?, step?) {
s := Integer(step ?? 1)
if !IsSet(start) && !IsSet(stop) && !IsSet(step)
c := 1 - s ; Range()
else if IsSet(start) && !IsSet(stop) && !IsSet(step)
c := 1 - s, m := Integer(start) ; Range(stop)
else if IsSet(start) && IsSet(stop)
c := Integer(start) - s, m := Integer(stop) ; Range(start, stop[, step])
else
Throw Error("パラメータが変です。", "Range")
return (&n) => (n := c += s, !IsSet(start) || c <= m)
}
633名無しさん@お腹いっぱい。
垢版 |
2023/10/08(日) 23:51:41.99ID:yx819iOD0
>>631
ほんとだ
myAnotherFunc(a?) でよかった
2023/10/13(金) 20:31:04.41ID:lUFs50Mf0
v2使ってます
ダブルクオーテーションで囲んだ変数を展開する方法はあるでしょうか?
調べてみたらv1の頃はできたっぽいんですが…

以下は例で、本当にやりたいのはテキストファイルに書いておいた文字列が含む変数を展開することです

v := "「A_AhkVersion」"
MsgBox v ; A_AhkVersionと表示されるのを2.0.10とかにしたい
2023/10/13(金) 21:09:19.74ID:kszrn8gL0
無変換(SC07B)+変換(SC079)+o
はどうやって書けばいいでしょうか?

~SC079 & SC07B & o::
は動きませんでした
2023/10/13(金) 22:58:19.97ID:1crCpIhe0
>>634
https://ahkscript.github.io/ja/docs/v2/Variables.htm#Intro

>>635
修飾キー(Ctrl、Shift、Alt、Win)以外の3つ以上のコンビネーションキーはサポートされていない
ホットキーを2つまでにして、#IF または ホットキーの処理内で GetKeyState で3つ目以降のキー状態を取得して分岐させることは可能ではあるが
そもそも使用中のキーボードによっては修飾キー以外のキーは3つ以上の同時押しを認識できない場合も多々あるのでそこら辺は環境による
2023/10/13(金) 23:04:18.36ID:ERs/JTAS0
>>634
https://www.autohotkey.com/docs/v2/lib/RegExMatch.htm#ExDeref


これv1の時からTransform廃止するからこんな感じの関数でやってねって言ってたけど
関数内ローカルの展開に使えなくてTransformの代わりにならない
2023/10/14(土) 00:58:11.68ID:iMxXiXwK0
>>636
ありがとうございます
アドバイス通りにやったらうまくいきました

#If GetKeyState("SC07B", "P") && GetKeyState("SC079", "P")
i::
SendInput, {Up}
return
#if

ところが次の問題が~sc079 & i::を設定していると動かなくなります
同時併用はできないでしょうか?
2023/10/14(土) 08:08:17.62ID:DXkbEwUP0
>>638
SC079 & i::
if(GetKeyState("SC07B", "P")){
;処理A
} else {
;処理B
}
return
とかどう?
2023/10/14(土) 08:39:17.96ID:281ftA3E0
>>638
実際にどういう書き方をしているかはわからんけど、おそらく #If が同条件での発動になってて ~sc079 & i:: の方が優先されているだけだと思う
やり方は色々あるけど一例としてこんな感じでも動く

#If !GetKeyState("SC07B", "P")
~sc079 & i::SendInput, {Down}
#If

#If GetKeyState("SC07B", "P") && GetKeyState("SC079", "P")
i::SendInput, {Up}
#If
2023/10/14(土) 09:17:07.76ID:3TcJyM+70
>>637
どうにかならないかと思ったけどあんまりどうにもならなかった
ローカル変数を扱いたいときだけ列挙してクロージャにして渡して
MsgBox Deref("%var1%def%var2%", varName => (var1, var2, %varName%))
関数定義のところで受け取って
Deref(Str, derefFunc?)
途中のderef部分を
out .= IsSet(derefFunc) ? derefFunc(m[2]) : %m[2]%
みたいな
2023/10/14(土) 13:14:24.79ID:281ftA3E0
>>634
636だけどちょっと読み違えてた。そういうことをやりたいならこんな感じで変数にしたい文字列を置き換えるかな…

v := "「A_AhkVersion」「A_YYYY」"
for var in ["A_AhkVersion", "A_YYYY"]
v := RegExReplace(v, var, %var%)
MsgBox v

連想配列を用いる方法もある。一見冗長に見えるがプログラミング的に推奨されるのはこちらの方だと思う
variables := Map("A_AhkVersion", A_AhkVersion, "A_YYYY", A_YYYY)
for key in variables
v := RegExReplace(v, key, variables[key])

v1のTransformも内部的には同様のことやってると思う。ただ、廃止された理由にも含まれると思うけど
予想外のところが変換されてたりしてバグの温床になるのであまり推奨されない
やるにしてももっとマッチパターンを厳密化した方が良い

>>641 の言ってることは別の問題で、やりたくはないんだろうけど元の変数をグローバル化してしまうのが簡単ではある
まあ手段が目的化してしまってる所もあるんだろうけど、
単純な文字列展開なら文字列結合やFormat関数でどうとでもなるので別にいらないのでは?とも思う
2023/10/14(土) 17:31:51.42ID:iMxXiXwK0
>>639
ありがとうございます それで完璧に動作しました!

>>640
ありがとうございます アドバイス通り競合していたみたいです
2023/10/14(土) 21:33:45.85ID:3TcJyM+70
>>642
元の質問とは別で>>637の挙げてるドキュメントの話だって説明ないとわかりにくかったね、今度から気をつけるわ
> 手段が目的化 はまさにそれで、パズル感覚でどうにかならないかなと考え始めたんで
Transformについては自分も同意するところ
645633
垢版 |
2023/10/15(日) 13:03:37.69ID:/B+GGiqI0
お返事をくださった皆さん、ありがとうございました
書き忘れてましたがv1でのやり方はご指摘の通りTransformでした
使う変数は組込変数で、使う場面も限定されるので、連想配列で工夫したいと思います
2023/10/15(日) 15:47:01.10ID:TKXXnipr0
https://www.autohotkey.com/docs/v2/Scripts.htm#continuation-section
だいぶ前のレスで上記URLを参考にしたと思われる
v2でのヒアドキュメントが変数を絡めると見にくくなる話が出てたが
継続行開始と終了の()の内側に"入れ改行位置を分けてやればいけることに気がついた

F1:: { ; 公式ドキュメントの例に則った記述
MsgBox("
(Join
現在のバージョンは「
)" A_AhkVersion "
(
」です。
)", "テストメッセージ")
}

F2:: { ; ちょっと詰め込みすぎて逆に分かりにくかもだがこんな感じでいける
MsgBox(
(Comment
"現在のバージョンは「" A_AhkVersion "」です。
今年は" A_YYYY "年です。
来年は" A_YYYY + 1 "年になるでしょう。 ; VSCODE AHKv2-LSP では文字列カラーになるけど、
; Commentオプションも機能する
来月は" ((A_MM + 1 > 12) ? 1 : A_MM + 1) "月のはずです。"
), "テストメッセージ")
}

ただし、公式記法と違い文中の"は`"のように明示的にエスケープする必要がある
その他の自動インデント判定等は普通に機能する
2023/10/16(月) 06:27:36.80ID:HnFsiC+R0
なんか無理やりヒアドキュメント使いたいってだけで本末転倒なんよ
最初の例だと

F1:: {
MsgBox(
"現在のバージョンは「"
A_AhkVersion
"」です。"
,"テストメッセージ"
)
}

とか書けばいいだけだし、二番目の例だと逆に可読性が低くてメンテナンスに問題出やすい
それに仕様の穴を突くような変態表記していると、本体更新で後々にバグとして顕在化してきて支障が出る
2023/10/16(月) 10:20:02.59ID:Bz5r9zRC0
なにがなんでもv2の欠点を欠点と認めない人がずっと頑張ってるけど
その行為なんかメリットある?
2023/10/16(月) 11:38:46.89ID:Wb0gkuWM0
v3まで待つしか
2023/10/16(月) 12:44:38.46ID:JfuEMiXm0
v1のヘンタイコードに対応することは二度とないよ
2023/10/16(月) 16:43:14.30ID:eNxVDezc0
過去の資産のあるゴミ言語から
資産のないゴミ言語になった
2023/10/16(月) 16:50:51.45ID:Wb0gkuWM0
先進性があるならともかく、どっかで見たような言語を再開発する意味とは
2023/10/16(月) 18:31:08.61ID:dLR3pMBg0
すまん例が悪かった。AHKでヒアドキュメントを使いたい理由って大抵は簡易的なリストや箇条書きなどの複数行の文を出力する際に
コード上で書いてあるインデントをLTrimで無視したい場合だと思うんだけど、公式例通りにやると変数が絡むとややこしくなるが、こういう風にも書けるということ
俺も理解が足りてなかったが、仕様上の穴ではなく、公式ドキュメントが分かりにくいだけで継続セクションが実際にどのようにどこまで有効であるのかという話
よく読んだら引用符で始まらない場合は式として扱われるという主旨のことが回りくどく書いてあった。正直そんなに必要になることはないし、どうでもいいと言われればそれでいいんだけどね

; 公式例 ""で囲んだ文字列内で継続セクションを開始している為()内の全てが文字列として扱われ、文中の"も文字として扱われるので、式を扱う場合は一度セクションを区切る必要がある
MsgBox("
  (LTrim
    現在のバージョンは「
  )" A_AhkVersion "
  (LTrim
    」です。
      あいうえお
    かき"く"けこ`nさしすせそ
  )"
) ; 5chの仕様の為、インデントは全角スペースに置き換え

; 文字列結合 各行頭行末に"、文中の"はエスケープ、改行もエスケープされた物のみ 全文を1行にまとめても良い
MsgBox(
  "現在のバージョンは「" A_AhkVersion "」です。`n"
    "あいうえお`n"
  "かき`"く`"けこ`nさしすせそ"
)

; ""の位置を変え、文中の"はエスケープ 文字列結合と同じく式として扱われ、対応する()内が継続セクションと認識される
MsgBox(
  (LTrim
    "現在のバージョンは「" A_AhkVersion "」です。
      あいうえお
    かき`"く`"けこ`nさしすせそ"
  )
)
2023/10/16(月) 19:09:39.65ID:pPRJ1RqD0
この仕様を見ていると変数展開させて使うって人は
ほとんどいないんだろうなと思うわ
PowerShellみたいにした方が良いのに
2023/10/16(月) 19:19:36.47ID:YfG7lbKB0
pythonのf文字列も実装遅かったしな
前からあったアイディアなのに採用しなかったということは、意図的に避けたんだろう
656名無しさん@お腹いっぱい。
垢版 |
2023/10/17(火) 19:53:48.71ID:v6kMRlAv0
右クリックだけの時は普通に右クリックして、
右クリック+ホイールの上下でブラウザの拡大縮小をやりたいんですが
下のマクロだとマウスクリック+ホイール上下で拡大縮小と右クリックメニューが同時に出ます
また、ブラウザのマウスジェスチャが効かなくなります。
どうやって修正したらいいですか。


RButton::RButton
return

RButton & WheelUp::
SendInput, {RButton}^{-} ; マウスの右クリック + ホイール上でCtrl+「-」が送信される
return

RButton & WheelDown::
SendInput, {RButton}^{+} ; マウスの右クリック + ホイール下でCtrl+「+」が送信される
return
657sage
垢版 |
2023/10/17(火) 21:25:54.42ID:hsUb4Jn70
右クリックメニューが最後出てもいいなら

WheelUp::
if GetKeyState("RButton")
SendInput {ctrl down}{WheelUp}{ctrl up}
else
SendInput {WheelUp}
return

WheelDown::
if GetKeyState("RButton")
SendInput {ctrl down}{WheelDown}{ctrl up}
else
SendInput {WheelDown}
return
2023/10/17(火) 22:29:56.60ID:zT0TFsHP0
MouseGestureLならMG_CancelDefBehavior()で右クリックメニューを抑制できるから
AutoHotkeyでも出来るだろうね
2023/10/17(火) 22:39:17.44ID:pYkaTV7l0
>>656
個人的な見解で申し訳ないが…

>ブラウザのマウスジェスチャが効かなくなります。
このように不都合なことが起こりかねないから
1)ブラウザ側のマウスジェスチャだけでやる
か、
2)ブラウザの機能を無効にして外部マウスジェスチャツール(例えばMouseGestureL.ahk)だけでやる
かどっちかにした方が良いよ思うよ

2)だとブラウザの操作がショートカットキーで全て実現できるならマウスジェスチャツールでも実現できるし
 そのブラウザだけじゃなく他のアプリでも個別に設定したマウスジェスチャで操作できる利点があるし
2023/10/18(水) 00:50:07.18ID:6hRvblQL0
>>656
一行目でメニュー抑止してるのに
再び{RButton}発行したらメニューが出るにきまってるだろ
こうすんだよ
SendInput, ^{-}
2023/10/20(金) 17:07:44.29ID:xwrdv7kg0
解決策がさっぱりわからない事でみなさんのご意見伺おうと整理して文章書いてたら解決してしまった…
2023/10/21(土) 00:14:47.71ID:QsqkSmLl0
>>661
あるある
2023/10/21(土) 00:15:10.09ID:QsqkSmLl0
>>661
あるある
664名無しさん@お腹いっぱい。
垢版 |
2023/10/21(土) 07:27:33.45ID:uDJeYMX30
書くと考えが整理されるよね
2023/10/21(土) 08:58:11.72ID:670MOFi40
変な話だけどコーディングは漢字の書き取りみたいに
不細工でもいいから手で繰り返し書くと習得が早まるのはあるな
コピペだけしているようだと全然仕組みを覚えない
2023/10/21(土) 10:25:37.09ID:qkI01+t50
改行を\nではなく`nにしないといけない理由って何だっけ
2023/10/21(土) 10:57:36.70ID:A46hLlw90
>>666
https://ahkwiki.net/Scripts#.E3.82.A8.E3.82.B9.E3.82.B1.E3.83.BC.E3.83.97.E6.96.87.E5.AD.97
2023/10/21(土) 11:12:42.18ID:670MOFi40
Windowsのコマンドラインと干渉させないためでしょ
例えば、\note というディレクトリが誤判定される危険性がある
\\でエスケープすればいいじゃんって見解もあるが
Windowsで既に用いられてるからね(例えばレジストリトファイル)
それをエスケープしようとすると\\\\のエスケープ地獄に陥るから
変えるのは妥当
どうしても嫌ならエスケープ文字を変えるオプションもあったはず
全くお勧めしないけど
2023/10/21(土) 11:18:54.11ID:670MOFi40
レジストリトファイル

レジストリ ファイル
2023/10/21(土) 11:46:02.56ID:qkI01+t50
他の言語と同じ方法にしとけばいいのに、独自路線を選ぶんだよな
誰も気付かなかったうまいやり方見つけちゃった
ちげーよ、デメリットがでかいから誰もやらないだけだよ
2023/10/21(土) 12:02:08.83ID:PFRfZnbl0
「"」はなんで「`"」じゃダメだったんだろう
2023/10/21(土) 12:31:59.43ID:Ls2E16c40
最近使い始めてどうしても意味がわからない事がありお教えて頂きたいのですが例を見ると二行目とか三行目の最初10個くらいスペース空けています
あれは必ず何個空けないといけないとか空けずに書くと弊害が起きるとか理由や意味があるからなってるんですよね?
空けずに左端から書くのがわかりやすいし書きやすいと思ったのですけどルールがあるならちゃんと知っておきたいと思って質問させて頂きましたサンプルなどを見てやっているのでV1です
よろしくお願いします
2023/10/21(土) 12:32:12.21ID:qkI01+t50
:= も同様の拘りなんだよな
何故かデファクトスタンダードに逆らってイキりたがる
= は曖昧だから:=と==だけにします、なら判る
= は既によく判らん用途に使ってるからとか基本設計がおかしい
2023/10/21(土) 12:39:38.67ID:MgetEplM0
>>670
独自つーかPowerShellに合わせただけだろ
ちょっと前に改行位置にいちゃもん付けてた人いたけど同じ人?

>>671
これもPowerShellに合わせた結果っぽいけど
PowerShellもエスケープの仕方色々あってperl式もできるけど正式には「`"」だな
更新の過程でそうなったのかもしれんけどPowerShellの歴史には詳しくないので分からん
AHKv2では「`"」になったな
2023/10/21(土) 12:42:29.00ID:uwWEvv0P0
v1の頃に決まった話になると、そんな小さいことに目くじら立てるどころじゃない気が
20年くらい前で他の同系統の言語も同じようなものとはいえツッコミどころが山盛りでは
2023/10/21(土) 12:47:14.39ID:MgetEplM0
>>672
基礎すぎてほぼスレ違いなんで「コーディング インデント」とかで検索して
ちなみにAHKはインデント必須な言語ではない
2023/10/21(土) 15:26:28.94ID:Ls2E16c40
>>676
レスありがとうございます
見やすくする為でAHKは必須では無い
じゃあ1個くらいで良いかな
どうもありがとうございました
2023/10/21(土) 21:30:29.25ID:9BoGHaTl0
見やすくというか
読みやすくというか
理解しやすくというか
2023/10/21(土) 23:29:27.11ID:Ls2E16c40
>>678
レスありがとうございます
どこからどこまでがどれか、みたいな事を見やすくして理解しやすくするって事ですよね
680名無しさん@お腹いっぱい。
垢版 |
2023/10/23(月) 03:03:06.70ID:WlJrDHiJ0
\\\\のエスケープ地獄は、たしかにちょっとつらい
なので ` でエスケープする妥当性はわかる
けど、JavaScript のように `` を文字列のリテラルとして使えるともっと嬉しかった
変数置換ができるなら更に嬉しい
(変数置換ができないとしても、' も " もエスケープなしで記述できるだけでも嬉しい)

AHK の無名関数は、JavaScript のように () => {} こうは書けず、() {} こう書く必要がある >>624
AHK は JavaScript を参考にしつつも、微妙に追随できていなくて、独自路線(しかもちょっと残念な)があるのが、たしかにちょっと残念に思う
個人的には、ここまで JavaScript を参考にしているなら、基本的に JavaScript と同じにして、
JavaScript + AHK 用の関数群という形にしてほしいと思う
v3 ではそうなるといいなと思う
2023/10/23(月) 08:16:22.70ID:YDc6e+fm0
> JavaScript + AHK 用の関数群
これってたしか日本の人がそういうの大分前に作ってたよね
ちょっと検索しても出なかったけどやめちゃったのか
2023/10/23(月) 21:54:32.87ID:9tna838Y0
v2公式でGUIにHTML/CSS/JSサポートしてくれたらいいのになぁ
683名無しさん@お腹いっぱい。
垢版 |
2023/10/24(火) 02:00:01.88ID:LXOelMg+0
ahkにキーボードマクロ機能ってあったりするのでしょうか?
具体的には、レノボ トラックポイントキーボードIIで、
起動時にFn+Escを自動で押したいのです
このキーボードでファンクションキーはデフォルトで機能キーが割り当てられていて、
ファンクションキーとして使うためには起動毎にファンクションロックしてやらないとダメなのを自動化したいのです
ベクターのキーボードマクロをいくつか試したのですが、
Fnキーみたいなキーボード個別の特殊キーに対応したのが見つけられません
ahkならキーコード拾えそうなので質問してみました
よろしくお願いいたします
684名無しさん@お腹いっぱい。
垢版 |
2023/10/24(火) 02:56:41.93ID:LXOelMg+0
>>683自己レス
どうやらこのFnキーはPCにはキーコードを発出しておらず、キーボード内で完結しているみたい
こりゃPC側で何やっても無理ですね
レノボに要望出すくらいかできることはなさそうです
お騒がせしました
685名無しさん@お腹いっぱい。
垢版 |
2023/10/24(火) 03:07:23.96ID:XK3z8D+O0
>>682
HTML を表示できるコンポーネントが使えたら便利そうだね
2023/10/24(火) 07:13:30.38ID:35rovyz10
Fnキーはどこもステルスだが
つーか使いにくいからFnキーとして置かなくても別キーとかでも良いのに、手前に陣取って邪魔なんだよな
2023/10/24(火) 08:38:38.26ID:Peo0Ada/0
Ctrlとかと誤爆しやすい位置にリマップ不可なFnなんて、悪意しか感じん
2023/10/24(火) 10:26:10.08ID:Hn9xTC4v0
ノートPCはディスプレイとキーボードを外付けして使うのが正解
2023/10/24(火) 10:43:45.23ID:hLY2TQAp0
ノートって今は中途半端すぎて売り上げ落ちているらしいな
スマホとかUSBメモリとかクラウドとか理由はいろいろあるんだろうけど
2023/10/24(火) 11:02:12.95ID:Hn9xTC4v0
うちの会社はフリーアドレス化したのでノートじゃないと無理だな
キーボード繋がせて欲しい
アプリケーションキーが存在しないとか意味判らん
2023/10/24(火) 11:42:22.74ID:hLY2TQAp0
AppsKeyは右クリが壊れた時に使ってたわ
あの時はアプリによっては右クリでしか呼び出せないメニューがあることに気づいいて
UI設計の大切さを学んだわ
2023/10/24(火) 12:35:47.02ID:utY4MNcR0
ThinkPadキーボード、Fnキー、Appsキーの話になってるので質問させて下さい
キーボードをThinkPadキーボードに変えたらやらないといけない事が出来たので何かアドバイスお願いします

ThinkPadキーボードは旧型のUSB接続
今まではAppsキーに二回押したらEscを割り当てていました(サンプルコード集参照)
ThinkPadキーボードに右クリボタンがありAppsキーは無いので記述をRbuttonに書き換え
これで以前と同じ使い心地になる…と思ったらそうではありませんでした
例えばファイルやメールにフォーカスがある時、Appsキーならカーソルがどこにあってもそフォーカスの物に右クリメニューが出ますが右ボタンだとカーソルのある場所の右クリメニューが出る
それは当たり前ですが、その使い方を望んではおらず
じゃあRbuttonをAppsキーにすればとも思いましたが、それだとマウス自体の右ボタンの挙動も変わってしまう
それも望んでいない
AHKにはRbuttonとして認識されているのでどうにも出来ないでしょうか?

それと真ん中のボタン、押しながらトラックポイントを動かせばスクロールする機能ですがこれにも何か別の機能とかを割り当てられないかとKey historyを見ても何も出ていません
Fnと同様で他に使う事は無理でしょうか?

Win11 Pro
AHK v1.1.37.01
2023/10/24(火) 12:41:50.16ID:acf7AARQ0
>>690
BTキーボードくらい繋がるでしょ
694名無しさん@お腹いっぱい。
垢版 |
2023/10/24(火) 14:02:16.64ID:7EB3AWV+0
キーAを押しながら、キーBを押すって動作をスクリプトに書いた場合、
Aを押した状態でB以外の入力を受け付けなくなるのって回避方法ある?
2023/10/25(水) 00:46:51.16ID:xHwpED+J0
>>685
あった
けどtridentつかってるw
https://github.com/G33kDude/Neutron.ahk
696名無しさん@お腹いっぱい。
垢版 |
2023/10/25(水) 07:18:48.75ID:0tfdF69F0
>>694
キーAとキーBは何キーですか?
697名無しさん@お腹いっぱい。
垢版 |
2023/10/25(水) 20:18:18.98ID:BMAQsHQh0
質問です。Potplayerをバックグラウンドで操作したいのですが以下のスクリプトでは動作しません。アドバイスお願いします。 v1.11.11

!enter::
DetectHiddenWindows, On
ControlSend, ahk_class, {space}, ahk_class PotPlayer
return
2023/10/26(木) 20:39:28.63ID:stdJKV+p0
その第一引数はなんなの
2023/10/27(金) 17:11:32.49ID:W6kx2B0a0
cmdでif必要なときはbatかahkで書いてたけど、|使って論理演算子作れるの発見して驚愕してる
wikiのRunに書いてほしかった…
2023/10/27(金) 18:13:18.72ID:Gr5vROVq0
これと、
Run / RunWait - Syntax & Usage | AutoHotkey v2
https://www.autohotkey.com/docs/v2/lib/Run.htm#Return_Value
これの組み合わせってこと?
Variables and Expressions - Definition & Usage | AutoHotkey v2
https://www.autohotkey.com/docs/v2/Variables.htm#Operators
2023/10/28(土) 04:22:30.30ID:MaaLhlYz0
|単体のパイプだとわからないけど、&や&&や||でコマンドライン1行に複数コマンドを書く話?
それならAutoHotKeyじゃなくてWindowsのcmdの解説だからwikiに書いてないのでは
702名無しさん@お腹いっぱい。
垢版 |
2023/10/28(土) 05:36:10.86ID:JXkBTMwt0
>>699
もう少しわかりやすく書いてほしい
2023/10/28(土) 11:18:23.74ID:Ti0/3LdE0
>>701
そうそう
findstrやgrepして分岐させるの一行で書けるのはでかい
もっと早く知りたかったぜ…
2023/10/29(日) 14:07:13.81ID:Pb3Qv4nh0
Sendで上下左右を指定すると通常の動作で一呼吸置いてから連打しますが、最初から連打(加速)させる方法ありますか?
2023/10/29(日) 14:17:04.36ID:WbJiFF2/0
お祈りが足りていないと思われます
706697
垢版 |
2023/10/29(日) 18:02:57.55ID:lxd/WQLd0
>>698
前身のKimplayerでは、この部分にahk_parentと書けば動いたので、試行錯誤の名残です。省略してもahk_parentと書いても動作しません。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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