[過去ログ] AutoHotkey スレッド part30 IDのみ (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
554: 2023/09/18(月)07:50 ID:DiSScFBT0(2/2) AAS
確率の問題なんだろうな
アトムであって欲しい処理のスリットが、v1よりv2の方が広い
ダーティでなくなった分だけ脆弱になってしまうっていう

どこでフックの奪い合いが起きても本質的に問題ない
という作りになってないと、どうしても不安定になる
555: 2023/09/18(月)13:07 ID:cSd5nxXI0(1) AAS
>>553
これはダメだな

治るのか?
556: 2023/09/18(月)22:46 ID:oUaH/YqD0(1) AAS
>>553
俺の環境ではそんなこと起こったことないが、公式フォーラムのバグレポート(未解決)に似たような報告があるな
v2ではSendMode("Input")がデフォルトになったが、このモードがGetKeyStateに干渉しているのではないかと推測されている
とりあえずEventモードなら発現しないらしいので
Send("{Blind}{WheelDown}")の所をSendEventにするか、SendModeをEventにしてしばらく様子を見てみて
557
(1): 2023/09/21(木)18:09 ID:/qgZEuhq0(1/3) AAS
お世話になっております!また教えて頂けませんか?すみません・・・

NumLock::Run,calculator:

Numロックで電卓を起動したいんですが、「既に起動している場合は、そのプロセスをアクティブにする」にあったコレを追加した時の全体の記述がわからないです・・・
単純に追加しただけだと無限に開けてしまいます

Process,Exist,calculator: ;起動しているかどうかを調べる
If ErrorLevel <> 0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
Else ;起動していなかった場合
calculator: ;起動する
558
(1): 2023/09/21(木)18:13 ID:/qgZEuhq0(2/3) AAS
>>532
あと先日のコレですが、フォアグラウンドに来てる時にはショートカットが効かない原因が全然わかりませんでした
難しいッス
559
(1): 2023/09/21(木)20:04 ID:3aqubDRm0(1) AAS
>>557
If WinExist("電卓")
WinActivate, 電卓
Else
Run, calc.exe
560: 2023/09/21(木)20:33 ID:/qgZEuhq0(3/3) AAS
>>559
ありがとうございます 動きました
サンプルと全然違ったw
561: 2023/09/22(金)18:18 ID:QYS2Gl5t0(1/8) AAS
>>558
ifとelseで出来ました!ありがとう!
562: 2023/09/22(金)18:25 ID:QYS2Gl5t0(2/8) AAS
else入ってなかったわ
563: 2023/09/22(金)21:16 ID:QYS2Gl5t0(3/8) AAS
やっぱりだめでした 他のアプリがアクティブだとそっちでショートカットが発動してしまいます
564
(1): 2023/09/22(金)21:27 ID:Z0XFNyal0(1/2) AAS
そうですか

自分が書いたものを貼らないなら
そうですか
としか返せませんよ
565
(1): 2023/09/22(金)22:05 ID:QYS2Gl5t0(4/8) AAS
spotifyKey(key) {
spotifyHwnd := WinExist("ahk_exe spotify.exe")
WinGet winMM, MinMax, ahk_id %spotifyHwnd% ;ウィンドウの最大化最小化を調べる
if (winMM = -1) ;最小化しているなら
WinRestore ahk_id %spotifyHwnd% ;最小化を解除
ControlFocus, Chrome_RenderWidgetHostHWND1, ahk_id %spotifyHwnd%
ControlSend, , %key%, ahk_id %spotifyHwnd%

if (winMM = 1)
ControlFocus, Chrome_RenderWidgetHostHWND1, ahk_id %spotifyHwnd%
Send %key%
省7
566
(1): 2023/09/22(金)22:05 ID:QYS2Gl5t0(5/8) AAS
>>564
すみません上書きで消してたみたいでゴミ箱探したりしましたが結局みつからず、たぶんこんなかんじでした
spotifyに直接sendしてないせいですね あと関数やら97%わかってないせいです・・・
5~7行目だけだとSpotifyが最前面にアクティブな時だけ!+{b}が送られない理由がまるでわからくて
if (winMM = 1)以降は意味分かってないのにこうやったら行けた程度のヤツで実際何も分かってないでやってます
567
(1): 2023/09/22(金)22:08 ID:QYS2Gl5t0(6/8) AAS
今は電卓のと足してコレで凌いでます Spotifyの上以外では動作するので問題はないです

NumLock::
If WinExist("電卓")
WinActivate, 電卓
Else
Run, calc.exe
return

spotifyKey(key) {
spotifyHwnd := WinExist("ahk_exe spotify.exe")
WinGet winMM, MinMax, ahk_id %spotifyHwnd% ;ウィンドウの最大化最小化を調べる
省11
568
(1): 2023/09/22(金)23:03 ID:Z0XFNyal0(2/2) AAS
これでどうかな

if (winMM = -1) {
WinRestore ahk_id %spotifyHwnd%
}
if WinActive("ahk_id " spotifyHwnd) {
Send, %key%
} else {
ControlFocus, Chrome_RenderWidgetHostHWND1, ahk_id %spotifyHwnd%
ControlSend,, %key%
}
569
(1): 2023/09/22(金)23:10 ID:aFWrFMGJ0(1) AAS
アクティブになってなかったらアクティブにしてから普通に Send, %key% すればいいんでないの?
570: 2023/09/22(金)23:16 ID:QYS2Gl5t0(7/8) AAS
>>568
完璧に動作しました 毎度毎度すみません ありがとうございます
すげー・・・ ビルゲイツかな
571: 2023/09/22(金)23:17 ID:QYS2Gl5t0(8/8) AAS
>>569
初心者とかそういうレベルじゃなくて、小学生が大学の講義に来てるような状態なんで汗
そもそもひらがなしか分かってない、みたいな
572: 2023/09/22(金)23:20 ID:GiZ06ZcB0(1/2) AAS
>>565-567
これ、なんとなーく動いているようだけど
Chrome_RenderWidgetHostHWND1ってWindow Classでしょ
本来はClassNN、テキスト、コントロールのHWNDのいずれかを指定しなければいけないはずなんだけど
Chrome_RenderWidgetHostHWND1とかIntermediate D3D Window1とか
573: 2023/09/22(金)23:20 ID:lHAlZ4YK0(1) AAS
一人ウィザードおるよな
何で動くのかじっくり解析しないと判らない
574: 2023/09/22(金)23:27 ID:GiZ06ZcB0(2/2) AAS
あっちゃんとClassNNだったか、すまん俺の勘違いだった
忘れてくれ
575: 2023/09/24(日)14:22 ID:3uyZatfe0(1) AAS
Release v2.0.10 · AutoHotkey/AutoHotkey
外部リンク[10]:github.com

Fixed crashing when a named function hotkey is used after #HotIf.
Fixed numeric literals ending with a dot to not cause line continuation.
Fixed pre-increment/decrement to work with chained array indexing.
Fixed OnNotify/OnCommand applying styles only applicable to OnEvent.
Fixed FileExist/DirExist leaking handles when emptydir\* is used.
Fixed DirExist leaking handles when only files match.
576: 2023/09/24(日)14:28 ID:rEh5+F890(1) AAS
なんでそんなに不安定なの
577: 2023/09/24(日)14:29 ID:tlr4nZzK0(1) AAS
ユーザーの移行が本格的に始まったのか
フィードバックが増えたんだろうな
578
(2): 2023/09/25(月)00:41 ID:Vz/pMkdm0(1/2) AAS
あるソフト(実行ファイル名をfoo.exeとします)のショートカットを殺しつつ、日本語文字入力中のショートカットは殺したくないのですが、なにか上手くやる方法はあるでしょうか?

例えば、foo.exeのショートカットキーCtrl+Uを無効にしつつ、
foo.exe内のテキストボックスで日本語入力をしているときにはIMEのCtrl+Uの機能を有効のままにしたい、
という感じです
579: 2023/09/25(月)00:44 ID:Vz/pMkdm0(2/2) AAS
>>578
間違えて途中で送信しちゃいました

foo.exeのCtrl+Uを無効にしようとして.ahkファイルに
#IfWinActive,ahk_exe foo.exe
^u::
とすると日本語入力中のCtrl+Uまで無効にされてしまい困っているという状態です
580: 2023/09/25(月)01:22 ID:H0BPCsvf0(1) AAS
Open InterpreterにAHK組み合わせたら本当の意味でのAutoHotKeyが実現できて笑ってる
581
(2): 2023/09/25(月)08:25 ID:+xBY+Yqs0(1) AAS
>>578

if (!A_CaretX) ;テキスト入力カーソルがオフの場合
処理A

は試しました?
582: 2023/09/26(火)04:45 ID:8jjFqO/J0(1) AAS
>>581
これ知らなかったので試してみましたがダメでした
多分カーソルがあるときに適用される、という感じですよね?
結局どっちも無効になってしまいます
583
(1): 2023/09/26(火)09:02 ID:UqTVMUhE0(1) AAS
(´・ω・`).。oO(「foo.exe」とかアプリ名を何で伏せるんだろう…)

・foo.exe側でCtrl+Uの割り当てを無効に変える(別のキーに割り当てる)
・日本語入力中のCtrl+Uの代わりにF6を押下する
・ahkでCtrl+U押下したらF6送出するようにする(foo.exe側のF6に何も割り当てがないこと)

この内のどれかで対処する(自分が思いついたのはこれだけだった)
584: 2023/09/26(火)10:16 ID:/VFCsiDa0(1/2) AAS
エロい奴だから
585: 2023/09/26(火)12:10 ID:BqRz5POi0(1) AAS
エロいやつをホットキー入れてまで起動してるやつおらんやろ
586: 2023/09/26(火)12:12 ID:/VFCsiDa0(2/2) AAS
全てのテクノロジーはエロを原動力に発展している
587: 2023/09/26(火)13:03 ID:Y07m41ei0(1) AAS
chromeとかelectron系はキャレットが独自実装だから取得できないよ
昔ACCライブラリで検出しようとして上手く行かなかったわ
X=%Caret_Location.x% Y=%Caret_Location.y%
588: 2023/09/27(水)22:43 ID:5u5WHwU70(1) AAS
>>583
伏せないほうがいいdすかね?Win版LINEです
589: 2023/09/28(木)20:08 ID:SIZ6DkpS0(1) AAS
tooltipにemoji表示する方法ありますか?
590: 2023/09/28(木)21:09 ID:Nf8VDUte0(1) AAS
モノクロやけど普通に出るやろ
ToolTip "🍦", 100, 150
591
(2): 2023/09/30(土)03:56 ID:EHs419dZ0(1) AAS
IfInString, a, m
hensuu:=1

aという変数の中にmという文字があると変数を変えるっていうだけの話なんですけど

IfInString, a, 1
hensuu:=1

IfInString, a, 2
hensuu:=1

IfInString, a, 3
hensuu:=1
と検出する文字列が複数になったときにやってられないんでループで回そうとしているんですが
省9
592: 2023/09/30(土)07:13 ID:aunpj35J0(1) AAS
原因はv1を使ってることです
593: 2023/09/30(土)07:49 ID:FJNgzxOZ0(1/2) AAS
>>591
ifの後をブロックで囲ってないからifに関係なくbreakされる

あと
>list=[1,2,3・・・・]
ここと
>, list[A_Index]
ここも直さないと期待通りには動かない
594: 2023/09/30(土)07:58 ID:nXp5JoSn0(1/2) AAS
>>591
その例だとこうだろ

hensuu:=0
a:="bred"
list:=["red","green","blue"]

Loop,% list.Length()
{
If InStr(a, list[A_Index]) {
hensuu:=1
break
省7
595: 2023/09/30(土)08:11 ID:8kGAhi8Z0(1) AAS
ちゃんとlistの長さ分だけループ周ってるの?
とか
list[A_Index]がちゃんと複数文字列としてループ内で展開されてるの?
とかもあるけど
そもそもの話としてIfInStringじゃなくてcontains、RegExMatch()あたりを使うべき処理かと
596: 2023/09/30(土)08:16 ID:nXp5JoSn0(2/2) AAS
普通は検索要素がそう多くなければ正規表現でちょちょってやるような処理よ
フラグを立てるだけならfalseとtrueを使った方が後でソースを見返すときに
分かりやすくていいぞ

hensuu:=false
a:="bred"
if RegExMatch(a,"red|green|blue") {
hensuu:=true
}
msgbox % hensuu
597
(7): 2023/09/30(土)22:12 ID:WWZtyfbn0(1/3) AAS
AutoHotkey初心者です。
質問があります。↓のようなスクリプトを書いて実行させました(verは1.1です)。

;「無変換」が単独で押されたら、「Backspace」が押されたことにする。
vk1D::Send,{Blind}{Backspace}
;「変換」が単独で押されたら、「Enter」が押されたことにする。
vk1C::Send,{Blind}{Enter}

通常の「Backspaceキー」と「Enterキー」ですと、キーを押し続けると削除や改行をし続けますが、
このスクリプトだと「無変換キー」と「変換キー」を押し続けても何も反応はなく、
押し上げてやっと1回だけ削除や改行をします。
これを通常の「Backspaceキー」と「Enterキー」と同じように、
省1
598
(1): 2023/09/30(土)22:25 ID:FJNgzxOZ0(2/2) AAS
↑いつもの荒らしです
触らないように
599: 597 2023/09/30(土)22:30 ID:WWZtyfbn0(2/3) AAS
>>598
いいえ、私は荒らしではありません。
本当に分からないことがあったので、質問させていただきました。
600: 2023/09/30(土)22:31 ID:lxiWU+kb0(1) AAS
Blindは大抵変なことになるな
601
(1): 2023/09/30(土)23:10 ID:g6QA9piE0(1) AAS
>>597
これなんかおかしいよ
Blindで修飾キーの押下の可能性をを示唆しているのに
無変換の単独キーって、よくわからん

例えば、Shift + BS とか Ctrl + BS は普通にエディタ使っていると
人によっては、まあまあ使うんだけど
Shift + 無変換で Shift + BS になってほしいのか、ほしくないのか?
どっち?
602
(2): 597 2023/09/30(土)23:37 ID:WWZtyfbn0(3/3) AAS
>>601
私はAutoHotkey初心者なので、「Blind」の意味もよく分かっていません。
参考にしたスクリプトに「Blind」が入っていたので、自分の方でも入れているだけです。

「Shift+無変換」で「Shift+Backspace」にはなって欲しくないです(必要と感じていないため)。

しかし、「Shift+変換」で「Shift+Enter」にはなって欲しいので、
>>597には省略して書きませんでしたが、実際のスクリプトは↓のようになっています。

;「変換」が単独で押されたら、「Enter」が押されたことにする。
vk1C::Send,{Blind}{Enter}
;「Shift+変換」が押されたら、「Shift+Enter」が押されたことにする。
+vk1C::Send,+{Enter}
省7
603
(1): 2023/09/30(土)23:42 ID:KnLHxxU/0(1/2) AAS
>>597
単独で押されたら って書いているということは別の行に
無変換+何かのキーとかのスクリプトを書いているんじゃないの?
604
(1): 2023/09/30(土)23:47 ID:KnLHxxU/0(2/2) AAS
>602
{Blind}付けるなら +vk1c:: の行は要らないのでは?
605
(1): 2023/10/01(日)00:07 ID:aO5V046V0(1/2) AAS
>>602
無変換だけサンプルで
変換の方はわかると思う

vk1D::BS
+vk1D::Del ;Shift + 無変換でdel
;*^vk1D:: ;Ctrl + 無変換は受け付ける
;他の修飾キーと無変換の組み合わせを無効化
*!vk1D::
*#vk1D::
return
省3
606
(1): 597 2023/10/01(日)00:24 ID:5y0E7yg10(1/2) AAS
>>603
そうです。別の行に↓のようなスクリプトを書いています。

;「無変換+Q」が押されたら、「Alt+←」が押されたことにする(戻る)。
vk1D & q::Send,!{Left}
;「無変換+W」が押されたら、「Alt+→」が押されたことにする(進む)。
vk1D & w::Send,!{Right}

>>604
今、試してみましたが「+vk1c:: の行」を消すと、
「Shift+変換」を押したら、「Shift+Enter」を押したように動作しなくなります。

>>605
省5
607
(1): 2023/10/01(日)00:44 ID:aO5V046V0(2/2) AAS
>>606
無変換の単独押しでリピートしなくなる
他はいける
組み込んで試してみなよ
608
(2): 597 2023/10/01(日)08:03 ID:5y0E7yg10(2/2) AAS
>>607
おっしゃっていることがよく分かりません。

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

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

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

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

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

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

() => expr

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

() => 123

{} が来る場合は JavaScript のように複数行書けたらいいのにな
省11
616: 2023/10/02(月)19:38 ID:4IbfaSx20(1/3) AAS
ahk v1.1です。
エクスプローラーで使用しています。
IME.ahk を使用しています。

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

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

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

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

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

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

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

GETとSETのみ
622: 2023/10/04(水)18:56 ID:tIruFCPa0(1) AAS
重い腰を上げてようやくv2に移行したがv2最高だわ
普通の文法のプログラムが書けるというすばらしさ
v1のサポートさっさと打ち切ってネット上の醜いv1のコード駆逐してほしい
623: 2023/10/04(水)22:35 ID:kSzEGkao0(1) AAS
>>621
完全版
外部リンク[ahk]:github.com
624
(1): 2023/10/05(木)06:02 ID:bWuMkV3d0(1/2) AAS
>>615 です
関数本体を宣言できる機能が1ヶ月前に v2.1-alpha で追加されたみたいです

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

```
SetTimer(() {
省7
625: 2023/10/05(木)06:18 ID:bWuMkV3d0(2/2) AAS
v2-alpha のドキュメント
外部リンク:www.autohotkey.com

v2-alpha のダウンロード
外部リンク:www.autohotkey.com

v2-alpha のリリースノート
外部リンク[htm]:www.autohotkey.com
626: 2023/10/06(金)01:45 ID:ev1enbnj0(1) AAS
v2.1 の無名関数を試した
AHK の無名関数は、OTB style としての僅かな制約(最初の { で改行しないといけない)があるけど、
それ以外は普通に使える

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

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

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

; v2.1
myFunc(a, b := unset) {
省15
629: 2023/10/07(土)19:32 ID:9zvIUWci0(2/2) AAS
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 という変数自体が存在しないのでエラーになる
}
```
630
(1): 2023/10/07(土)19:53 ID:p00Uoc4y0(1) AAS
めんどくさいだけでメリットを感じない
631
(1): 2023/10/08(日)13:05 ID:SBMAHfMn0(1/2) AAS
>>628
その辺り一部は2.0.10でも使えて便利
それと別の関数に渡すやつはmyAnotherFunc(a?)でいいのでは

>>630
あったらいいなが自分に来るまでなくてもいいやつなんで
メリットを感じないならスルーで問題ないよ
632: 2023/10/08(日)13:53 ID:SBMAHfMn0(2/2) AAS
なんかこれ系使ってるの書いたなと思って探してきた
前にループで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)
省5
633
(1): 2023/10/08(日)23:51 ID:yx819iOD0(1) AAS
>>631
ほんとだ
myAnotherFunc(a?) でよかった
634
(3): 2023/10/13(金)20:31 ID:lUFs50Mf0(1) AAS
v2使ってます
ダブルクオーテーションで囲んだ変数を展開する方法はあるでしょうか?
調べてみたらv1の頃はできたっぽいんですが…

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

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

~SC079 & SC07B & o::
は動きませんでした
636
(1): 2023/10/13(金)22:58 ID:1crCpIhe0(1) AAS
>>634
外部リンク[htm]:ahkscript.github.io

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

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

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

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

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

#If GetKeyState("SC07B", "P") && GetKeyState("SC079", "P")
i::SendInput, {Up}
#If
641
(1): 2023/10/14(土)09:17 ID:3TcJyM+70(1/2) AAS
>>637
どうにかならないかと思ったけどあんまりどうにもならなかった
ローカル変数を扱いたいときだけ列挙してクロージャにして渡して
MsgBox Deref("%var1%def%var2%", varName => (var1, var2, %varName%))
関数定義のところで受け取って
Deref(Str, derefFunc?)
途中のderef部分を
out .= IsSet(derefFunc) ? derefFunc(m[2]) : %m[2]%
みたいな
642
(1): 2023/10/14(土)13:14 ID:281ftA3E0(2/2) AAS
>>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])
省6
643: 2023/10/14(土)17:31 ID:iMxXiXwK0(2/2) AAS
>>639
ありがとうございます それで完璧に動作しました!

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

F1:: { ; 公式ドキュメントの例に則った記述
MsgBox("
(Join
現在のバージョンは「
)" A_AhkVersion "
(
省15
647: 2023/10/16(月)06:27 ID:HnFsiC+R0(1) AAS
なんか無理やりヒアドキュメント使いたいってだけで本末転倒なんよ
最初の例だと

F1:: {
MsgBox(
"現在のバージョンは「"
A_AhkVersion
"」です。"
,"テストメッセージ"
)
}
省2
648: 2023/10/16(月)10:20 ID:Bz5r9zRC0(1) AAS
なにがなんでもv2の欠点を欠点と認めない人がずっと頑張ってるけど
その行為なんかメリットある?
649: 2023/10/16(月)11:38 ID:Wb0gkuWM0(1/2) AAS
v3まで待つしか
650: 2023/10/16(月)12:44 ID:JfuEMiXm0(1) AAS
v1のヘンタイコードに対応することは二度とないよ
651: 2023/10/16(月)16:43 ID:eNxVDezc0(1) AAS
過去の資産のあるゴミ言語から
資産のないゴミ言語になった
652: 2023/10/16(月)16:50 ID:Wb0gkuWM0(2/2) AAS
先進性があるならともかく、どっかで見たような言語を再開発する意味とは
653: 2023/10/16(月)18:31 ID:dLR3pMBg0(1) AA×

1-
あと 349 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.064s