元々が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
探検
AutoHotkey スレッド part30 IDのみ
■ このスレッドは過去ログ倉庫に格納されています
2022/02/08(火) 18:38:19.33ID:UTRGyCNl0
2023/09/18(月) 07:32:17.17ID:DiSScFBT0
sleep 1 を入れた方がいいっぽい
ループ処理がそれに代わってるかもしれないけど
ループ処理がそれに代わってるかもしれないけど
2023/09/18(月) 07:39:40.16ID:G+And54K0
*XButton1::
{
while GetKeyState("XButton1", "P")
{
Send {Blind}{WheelDown}
Sleep 10
}
}
v1は正常に動く
v2だと稀にGetKeyStateの状態が更新されずに永久ループする
{
while GetKeyState("XButton1", "P")
{
Send {Blind}{WheelDown}
Sleep 10
}
}
v1は正常に動く
v2だと稀にGetKeyStateの状態が更新されずに永久ループする
2023/09/18(月) 07:50:20.70ID:DiSScFBT0
確率の問題なんだろうな
アトムであって欲しい処理のスリットが、v1よりv2の方が広い
ダーティでなくなった分だけ脆弱になってしまうっていう
どこでフックの奪い合いが起きても本質的に問題ない
という作りになってないと、どうしても不安定になる
アトムであって欲しい処理のスリットが、v1よりv2の方が広い
ダーティでなくなった分だけ脆弱になってしまうっていう
どこでフックの奪い合いが起きても本質的に問題ない
という作りになってないと、どうしても不安定になる
2023/09/18(月) 13:07:34.00ID:cSd5nxXI0
2023/09/18(月) 22:46:50.69ID:oUaH/YqD0
>>553
俺の環境ではそんなこと起こったことないが、公式フォーラムのバグレポート(未解決)に似たような報告があるな
v2ではSendMode("Input")がデフォルトになったが、このモードがGetKeyStateに干渉しているのではないかと推測されている
とりあえずEventモードなら発現しないらしいので
Send("{Blind}{WheelDown}")の所をSendEventにするか、SendModeをEventにしてしばらく様子を見てみて
俺の環境ではそんなこと起こったことないが、公式フォーラムのバグレポート(未解決)に似たような報告があるな
v2ではSendMode("Input")がデフォルトになったが、このモードがGetKeyStateに干渉しているのではないかと推測されている
とりあえずEventモードなら発現しないらしいので
Send("{Blind}{WheelDown}")の所をSendEventにするか、SendModeをEventにしてしばらく様子を見てみて
2023/09/21(木) 18:09:14.32ID:/qgZEuhq0
お世話になっております!また教えて頂けませんか?すみません・・・
NumLock::Run,calculator:
Numロックで電卓を起動したいんですが、「既に起動している場合は、そのプロセスをアクティブにする」にあったコレを追加した時の全体の記述がわからないです・・・
単純に追加しただけだと無限に開けてしまいます
Process,Exist,calculator: ;起動しているかどうかを調べる
If ErrorLevel <> 0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
Else ;起動していなかった場合
calculator: ;起動する
NumLock::Run,calculator:
Numロックで電卓を起動したいんですが、「既に起動している場合は、そのプロセスをアクティブにする」にあったコレを追加した時の全体の記述がわからないです・・・
単純に追加しただけだと無限に開けてしまいます
Process,Exist,calculator: ;起動しているかどうかを調べる
If ErrorLevel <> 0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される)
WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする
Else ;起動していなかった場合
calculator: ;起動する
2023/09/21(木) 18:13:06.53ID:/qgZEuhq0
2023/09/21(木) 20:04:42.79ID:3aqubDRm0
2023/09/21(木) 20:33:27.57ID:/qgZEuhq0
2023/09/22(金) 18:18:33.75ID:QYS2Gl5t0
>>558
ifとelseで出来ました!ありがとう!
ifとelseで出来ました!ありがとう!
2023/09/22(金) 18:25:41.20ID:QYS2Gl5t0
else入ってなかったわ
2023/09/22(金) 21:16:52.43ID:QYS2Gl5t0
やっぱりだめでした 他のアプリがアクティブだとそっちでショートカットが発動してしまいます
2023/09/22(金) 21:27:25.15ID:Z0XFNyal0
そうですか
自分が書いたものを貼らないなら
そうですか
としか返せませんよ
自分が書いたものを貼らないなら
そうですか
としか返せませんよ
2023/09/22(金) 22:05:39.07ID:QYS2Gl5t0
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%
Return
}
Pause::
{
spotifyKey("!+{b}")
Return
}
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%
Return
}
Pause::
{
spotifyKey("!+{b}")
Return
}
2023/09/22(金) 22:05:51.98ID:QYS2Gl5t0
>>564
すみません上書きで消してたみたいでゴミ箱探したりしましたが結局みつからず、たぶんこんなかんじでした
spotifyに直接sendしてないせいですね あと関数やら97%わかってないせいです・・・
5~7行目だけだとSpotifyが最前面にアクティブな時だけ!+{b}が送られない理由がまるでわからくて
if (winMM = 1)以降は意味分かってないのにこうやったら行けた程度のヤツで実際何も分かってないでやってます
すみません上書きで消してたみたいでゴミ箱探したりしましたが結局みつからず、たぶんこんなかんじでした
spotifyに直接sendしてないせいですね あと関数やら97%わかってないせいです・・・
5~7行目だけだとSpotifyが最前面にアクティブな時だけ!+{b}が送られない理由がまるでわからくて
if (winMM = 1)以降は意味分かってないのにこうやったら行けた程度のヤツで実際何も分かってないでやってます
2023/09/22(金) 22:08:40.20ID:QYS2Gl5t0
今は電卓のと足してコレで凌いでます Spotifyの上以外では動作するので問題はないです
NumLock::
If WinExist("電卓")
WinActivate, 電卓
Else
Run, calc.exe
return
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%
Return
}
Pause::
{
spotifyKey("!+{b}")
Return
}
NumLock::
If WinExist("電卓")
WinActivate, 電卓
Else
Run, calc.exe
return
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%
Return
}
Pause::
{
spotifyKey("!+{b}")
Return
}
2023/09/22(金) 23:03:49.16ID:Z0XFNyal0
これでどうかな
if (winMM = -1) {
WinRestore ahk_id %spotifyHwnd%
}
if WinActive("ahk_id " spotifyHwnd) {
Send, %key%
} else {
ControlFocus, Chrome_RenderWidgetHostHWND1, ahk_id %spotifyHwnd%
ControlSend,, %key%
}
if (winMM = -1) {
WinRestore ahk_id %spotifyHwnd%
}
if WinActive("ahk_id " spotifyHwnd) {
Send, %key%
} else {
ControlFocus, Chrome_RenderWidgetHostHWND1, ahk_id %spotifyHwnd%
ControlSend,, %key%
}
2023/09/22(金) 23:10:08.94ID:aFWrFMGJ0
アクティブになってなかったらアクティブにしてから普通に Send, %key% すればいいんでないの?
2023/09/22(金) 23:16:19.36ID:QYS2Gl5t0
2023/09/22(金) 23:17:51.06ID:QYS2Gl5t0
2023/09/22(金) 23:20:27.07ID:GiZ06ZcB0
>>565-567
これ、なんとなーく動いているようだけど
Chrome_RenderWidgetHostHWND1ってWindow Classでしょ
本来はClassNN、テキスト、コントロールのHWNDのいずれかを指定しなければいけないはずなんだけど
Chrome_RenderWidgetHostHWND1とかIntermediate D3D Window1とか
これ、なんとなーく動いているようだけど
Chrome_RenderWidgetHostHWND1ってWindow Classでしょ
本来はClassNN、テキスト、コントロールのHWNDのいずれかを指定しなければいけないはずなんだけど
Chrome_RenderWidgetHostHWND1とかIntermediate D3D Window1とか
2023/09/22(金) 23:20:58.65ID:lHAlZ4YK0
一人ウィザードおるよな
何で動くのかじっくり解析しないと判らない
何で動くのかじっくり解析しないと判らない
2023/09/22(金) 23:27:39.72ID:GiZ06ZcB0
あっちゃんとClassNNだったか、すまん俺の勘違いだった
忘れてくれ
忘れてくれ
2023/09/24(日) 14:22:42.43ID:3uyZatfe0
Release v2.0.10 · AutoHotkey/AutoHotkey
https://github.com/AutoHotkey/AutoHotkey/releases/tag/v2.0.10
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.
https://github.com/AutoHotkey/AutoHotkey/releases/tag/v2.0.10
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.
2023/09/24(日) 14:28:51.71ID:rEh5+F890
なんでそんなに不安定なの
2023/09/24(日) 14:29:05.38ID:tlr4nZzK0
ユーザーの移行が本格的に始まったのか
フィードバックが増えたんだろうな
フィードバックが増えたんだろうな
2023/09/25(月) 00:41:40.07ID:Vz/pMkdm0
あるソフト(実行ファイル名をfoo.exeとします)のショートカットを殺しつつ、日本語文字入力中のショートカットは殺したくないのですが、なにか上手くやる方法はあるでしょうか?
例えば、foo.exeのショートカットキーCtrl+Uを無効にしつつ、
foo.exe内のテキストボックスで日本語入力をしているときにはIMEのCtrl+Uの機能を有効のままにしたい、
という感じです
例えば、foo.exeのショートカットキーCtrl+Uを無効にしつつ、
foo.exe内のテキストボックスで日本語入力をしているときにはIMEのCtrl+Uの機能を有効のままにしたい、
という感じです
2023/09/25(月) 00:44:10.82ID:Vz/pMkdm0
>>578
間違えて途中で送信しちゃいました
foo.exeのCtrl+Uを無効にしようとして.ahkファイルに
#IfWinActive,ahk_exe foo.exe
^u::
とすると日本語入力中のCtrl+Uまで無効にされてしまい困っているという状態です
間違えて途中で送信しちゃいました
foo.exeのCtrl+Uを無効にしようとして.ahkファイルに
#IfWinActive,ahk_exe foo.exe
^u::
とすると日本語入力中のCtrl+Uまで無効にされてしまい困っているという状態です
2023/09/25(月) 01:22:43.19ID:H0BPCsvf0
Open InterpreterにAHK組み合わせたら本当の意味でのAutoHotKeyが実現できて笑ってる
2023/09/25(月) 08:25:29.27ID:+xBY+Yqs0
2023/09/26(火) 04:45:18.81ID:8jjFqO/J0
2023/09/26(火) 09:02:12.31ID:UqTVMUhE0
(´・ω・`).。oO(「foo.exe」とかアプリ名を何で伏せるんだろう…)
・foo.exe側でCtrl+Uの割り当てを無効に変える(別のキーに割り当てる)
・日本語入力中のCtrl+Uの代わりにF6を押下する
・ahkでCtrl+U押下したらF6送出するようにする(foo.exe側のF6に何も割り当てがないこと)
この内のどれかで対処する(自分が思いついたのはこれだけだった)
・foo.exe側でCtrl+Uの割り当てを無効に変える(別のキーに割り当てる)
・日本語入力中のCtrl+Uの代わりにF6を押下する
・ahkでCtrl+U押下したらF6送出するようにする(foo.exe側のF6に何も割り当てがないこと)
この内のどれかで対処する(自分が思いついたのはこれだけだった)
2023/09/26(火) 10:16:47.57ID:/VFCsiDa0
エロい奴だから
585名無しさん@お腹いっぱい。
2023/09/26(火) 12:10:25.33ID:BqRz5POi0 エロいやつをホットキー入れてまで起動してるやつおらんやろ
2023/09/26(火) 12:12:30.33ID:/VFCsiDa0
全てのテクノロジーはエロを原動力に発展している
2023/09/26(火) 13:03:53.20ID:Y07m41ei0
chromeとかelectron系はキャレットが独自実装だから取得できないよ
昔ACCライブラリで検出しようとして上手く行かなかったわ
X=%Caret_Location.x% Y=%Caret_Location.y%
昔ACCライブラリで検出しようとして上手く行かなかったわ
X=%Caret_Location.x% Y=%Caret_Location.y%
2023/09/27(水) 22:43:18.37ID:5u5WHwU70
>>583
伏せないほうがいいdすかね?Win版LINEです
伏せないほうがいいdすかね?Win版LINEです
2023/09/28(木) 20:08:11.30ID:SIZ6DkpS0
tooltipにemoji表示する方法ありますか?
2023/09/28(木) 21:09:38.26ID:Nf8VDUte0
モノクロやけど普通に出るやろ
ToolTip "🍦", 100, 150
ToolTip "🍦", 100, 150
2023/09/30(土) 03:56:22.34ID:EHs419dZ0
IfInString, a, m
hensuu:=1
aという変数の中にmという文字があると変数を変えるっていうだけの話なんですけど
IfInString, a, 1
hensuu:=1
IfInString, a, 2
hensuu:=1
IfInString, a, 3
hensuu:=1
と検出する文字列が複数になったときにやってられないんでループで回そうとしているんですが
list=[1,2,3・・・・]
Loop,% list.Length()
{
IfInString, a, list[A_Index]
hensuu:=1
break
}
としているんですが、”へんすう”が0のままでbreakされているようです
原因は何でしょうか?
hensuu:=1
aという変数の中にmという文字があると変数を変えるっていうだけの話なんですけど
IfInString, a, 1
hensuu:=1
IfInString, a, 2
hensuu:=1
IfInString, a, 3
hensuu:=1
と検出する文字列が複数になったときにやってられないんでループで回そうとしているんですが
list=[1,2,3・・・・]
Loop,% list.Length()
{
IfInString, a, list[A_Index]
hensuu:=1
break
}
としているんですが、”へんすう”が0のままでbreakされているようです
原因は何でしょうか?
2023/09/30(土) 07:13:52.00ID:aunpj35J0
原因はv1を使ってることです
2023/09/30(土) 07:49:51.39ID:FJNgzxOZ0
2023/09/30(土) 07:58:11.28ID:nXp5JoSn0
>>591
その例だとこうだろ
hensuu:=0
a:="bred"
list:=["red","green","blue"]
Loop,% list.Length()
{
If InStr(a, list[A_Index]) {
hensuu:=1
break
}
}
msgbox % hensuu
IfInStringは廃止(予定)だから使うべきじゃない
関数のInStrを使う
あと、listの後にコロンが入ってない
文字列なのにダブルクォーテーションでくくってない
その例だとこうだろ
hensuu:=0
a:="bred"
list:=["red","green","blue"]
Loop,% list.Length()
{
If InStr(a, list[A_Index]) {
hensuu:=1
break
}
}
msgbox % hensuu
IfInStringは廃止(予定)だから使うべきじゃない
関数のInStrを使う
あと、listの後にコロンが入ってない
文字列なのにダブルクォーテーションでくくってない
2023/09/30(土) 08:11:22.14ID:8kGAhi8Z0
ちゃんとlistの長さ分だけループ周ってるの?
とか
list[A_Index]がちゃんと複数文字列としてループ内で展開されてるの?
とかもあるけど
そもそもの話としてIfInStringじゃなくてcontains、RegExMatch()あたりを使うべき処理かと
とか
list[A_Index]がちゃんと複数文字列としてループ内で展開されてるの?
とかもあるけど
そもそもの話としてIfInStringじゃなくてcontains、RegExMatch()あたりを使うべき処理かと
2023/09/30(土) 08:16:16.25ID:nXp5JoSn0
普通は検索要素がそう多くなければ正規表現でちょちょってやるような処理よ
フラグを立てるだけならfalseとtrueを使った方が後でソースを見返すときに
分かりやすくていいぞ
hensuu:=false
a:="bred"
if RegExMatch(a,"red|green|blue") {
hensuu:=true
}
msgbox % hensuu
フラグを立てるだけならfalseとtrueを使った方が後でソースを見返すときに
分かりやすくていいぞ
hensuu:=false
a:="bred"
if RegExMatch(a,"red|green|blue") {
hensuu:=true
}
msgbox % hensuu
2023/09/30(土) 22:12:19.26ID:WWZtyfbn0
AutoHotkey初心者です。
質問があります。↓のようなスクリプトを書いて実行させました(verは1.1です)。
;「無変換」が単独で押されたら、「Backspace」が押されたことにする。
vk1D::Send,{Blind}{Backspace}
;「変換」が単独で押されたら、「Enter」が押されたことにする。
vk1C::Send,{Blind}{Enter}
通常の「Backspaceキー」と「Enterキー」ですと、キーを押し続けると削除や改行をし続けますが、
このスクリプトだと「無変換キー」と「変換キー」を押し続けても何も反応はなく、
押し上げてやっと1回だけ削除や改行をします。
これを通常の「Backspaceキー」と「Enterキー」と同じように、
キーを押し続けると削除や改行をし続けるようにするにはどのようなスクリプトを書けばいいのでしょうか?
質問があります。↓のようなスクリプトを書いて実行させました(verは1.1です)。
;「無変換」が単独で押されたら、「Backspace」が押されたことにする。
vk1D::Send,{Blind}{Backspace}
;「変換」が単独で押されたら、「Enter」が押されたことにする。
vk1C::Send,{Blind}{Enter}
通常の「Backspaceキー」と「Enterキー」ですと、キーを押し続けると削除や改行をし続けますが、
このスクリプトだと「無変換キー」と「変換キー」を押し続けても何も反応はなく、
押し上げてやっと1回だけ削除や改行をします。
これを通常の「Backspaceキー」と「Enterキー」と同じように、
キーを押し続けると削除や改行をし続けるようにするにはどのようなスクリプトを書けばいいのでしょうか?
2023/09/30(土) 22:25:35.84ID:FJNgzxOZ0
↑いつもの荒らしです
触らないように
触らないように
600名無しさん@お腹いっぱい。
2023/09/30(土) 22:31:34.90ID:lxiWU+kb0 Blindは大抵変なことになるな
2023/09/30(土) 23:10:22.54ID:g6QA9piE0
>>597
これなんかおかしいよ
Blindで修飾キーの押下の可能性をを示唆しているのに
無変換の単独キーって、よくわからん
例えば、Shift + BS とか Ctrl + BS は普通にエディタ使っていると
人によっては、まあまあ使うんだけど
Shift + 無変換で Shift + BS になってほしいのか、ほしくないのか?
どっち?
これなんかおかしいよ
Blindで修飾キーの押下の可能性をを示唆しているのに
無変換の単独キーって、よくわからん
例えば、Shift + BS とか Ctrl + BS は普通にエディタ使っていると
人によっては、まあまあ使うんだけど
Shift + 無変換で Shift + BS になってほしいのか、ほしくないのか?
どっち?
602597
2023/09/30(土) 23:37:47.61ID:WWZtyfbn0 >>601
私はAutoHotkey初心者なので、「Blind」の意味もよく分かっていません。
参考にしたスクリプトに「Blind」が入っていたので、自分の方でも入れているだけです。
「Shift+無変換」で「Shift+Backspace」にはなって欲しくないです(必要と感じていないため)。
しかし、「Shift+変換」で「Shift+Enter」にはなって欲しいので、
>>597には省略して書きませんでしたが、実際のスクリプトは↓のようになっています。
;「変換」が単独で押されたら、「Enter」が押されたことにする。
vk1C::Send,{Blind}{Enter}
;「Shift+変換」が押されたら、「Shift+Enter」が押されたことにする。
+vk1C::Send,+{Enter}
省略した理由は、「Shift+変換」は押し続けて反応して欲しいわけではなかったからですが、
今、試してみたところ、↑のスクリプトだと、「変換」単独だと押し続けて反応はしませんが、
「Shift+変換」は押し続けて反応しますね。
私の希望は以下の3点です。
@「無変換」を押し続けると「Backspace」を押し続けたように動作して欲しい。
A「変換」を押し続けると「Enter」を押し続けたように動作して欲しい。
B「Shift+変換」を押したら「Shift+Enter」を押したように動作して欲しい。
私はAutoHotkey初心者なので、「Blind」の意味もよく分かっていません。
参考にしたスクリプトに「Blind」が入っていたので、自分の方でも入れているだけです。
「Shift+無変換」で「Shift+Backspace」にはなって欲しくないです(必要と感じていないため)。
しかし、「Shift+変換」で「Shift+Enter」にはなって欲しいので、
>>597には省略して書きませんでしたが、実際のスクリプトは↓のようになっています。
;「変換」が単独で押されたら、「Enter」が押されたことにする。
vk1C::Send,{Blind}{Enter}
;「Shift+変換」が押されたら、「Shift+Enter」が押されたことにする。
+vk1C::Send,+{Enter}
省略した理由は、「Shift+変換」は押し続けて反応して欲しいわけではなかったからですが、
今、試してみたところ、↑のスクリプトだと、「変換」単独だと押し続けて反応はしませんが、
「Shift+変換」は押し続けて反応しますね。
私の希望は以下の3点です。
@「無変換」を押し続けると「Backspace」を押し続けたように動作して欲しい。
A「変換」を押し続けると「Enter」を押し続けたように動作して欲しい。
B「Shift+変換」を押したら「Shift+Enter」を押したように動作して欲しい。
2023/09/30(土) 23:42:14.27ID:KnLHxxU/0
2023/09/30(土) 23:47:22.86ID:KnLHxxU/0
>602
{Blind}付けるなら +vk1c:: の行は要らないのでは?
{Blind}付けるなら +vk1c:: の行は要らないのでは?
2023/10/01(日) 00:07:27.97ID:aO5V046V0
>>602
無変換だけサンプルで
変換の方はわかると思う
vk1D::BS
+vk1D::Del ;Shift + 無変換でdel
;*^vk1D:: ;Ctrl + 無変換は受け付ける
;他の修飾キーと無変換の組み合わせを無効化
*!vk1D::
*#vk1D::
return
当然だけど、無変換 + a など無変換を修飾キーとしたホットキーを混ぜると正しく動作しない
そういうのも使いたいなあとなると、押下時間などを考慮した多少面倒なコードを書く必要がある
そうすると誤爆したりする可能性があるのでお勧めしない
無変換だけサンプルで
変換の方はわかると思う
vk1D::BS
+vk1D::Del ;Shift + 無変換でdel
;*^vk1D:: ;Ctrl + 無変換は受け付ける
;他の修飾キーと無変換の組み合わせを無効化
*!vk1D::
*#vk1D::
return
当然だけど、無変換 + a など無変換を修飾キーとしたホットキーを混ぜると正しく動作しない
そういうのも使いたいなあとなると、押下時間などを考慮した多少面倒なコードを書く必要がある
そうすると誤爆したりする可能性があるのでお勧めしない
606597
2023/10/01(日) 00:24:47.36ID:5y0E7yg10 >>603
そうです。別の行に↓のようなスクリプトを書いています。
;「無変換+Q」が押されたら、「Alt+←」が押されたことにする(戻る)。
vk1D & q::Send,!{Left}
;「無変換+W」が押されたら、「Alt+→」が押されたことにする(進む)。
vk1D & w::Send,!{Right}
>>604
今、試してみましたが「+vk1c:: の行」を消すと、
「Shift+変換」を押したら、「Shift+Enter」を押したように動作しなくなります。
>>605
スクリプト、どうもありがとうございます。
別の行に「無変換+何かのキー」のスクリプトを書くと、
「無変換」を単独で押し続けた時に「Backspace」を押し続けたように動作しなくなるということですか?
そうならば、無変換キーを修飾キーとしたホットキーは使い続けたいので、
「無変換」を単独で押し続けた時に「Backspace」を押し続けたように動作して欲しいという希望は諦めることにします。
そうです。別の行に↓のようなスクリプトを書いています。
;「無変換+Q」が押されたら、「Alt+←」が押されたことにする(戻る)。
vk1D & q::Send,!{Left}
;「無変換+W」が押されたら、「Alt+→」が押されたことにする(進む)。
vk1D & w::Send,!{Right}
>>604
今、試してみましたが「+vk1c:: の行」を消すと、
「Shift+変換」を押したら、「Shift+Enter」を押したように動作しなくなります。
>>605
スクリプト、どうもありがとうございます。
別の行に「無変換+何かのキー」のスクリプトを書くと、
「無変換」を単独で押し続けた時に「Backspace」を押し続けたように動作しなくなるということですか?
そうならば、無変換キーを修飾キーとしたホットキーは使い続けたいので、
「無変換」を単独で押し続けた時に「Backspace」を押し続けたように動作して欲しいという希望は諦めることにします。
2023/10/01(日) 00:44:40.72ID:aO5V046V0
608597
2023/10/01(日) 08:03:39.09ID:5y0E7yg10 >>607
おっしゃっていることがよく分かりません。
私は「無変換」を「修飾キー」として使った上で、
「無変換」単独押しをした時は(Backspaceキーとして)「キーリピート」をして削除し続けて欲しいのですが、
それはできないということでしょうか?
おっしゃっていることがよく分かりません。
私は「無変換」を「修飾キー」として使った上で、
「無変換」単独押しをした時は(Backspaceキーとして)「キーリピート」をして削除し続けて欲しいのですが、
それはできないということでしょうか?
2023/10/01(日) 08:09:26.00ID:vJZ6he//0
2023/10/01(日) 09:14:16.51ID:jCSy+5iI0
キートップの文字を書き換えたかのように、そのキーを完全に置き換える
どんな組み合わせで押しても置き換わって動作する
という挙動をahkで書くのはなかなか大変だけど、
yamyでは1行だったんだよな
どんな組み合わせで押しても置き換わって動作する
という挙動をahkで書くのはなかなか大変だけど、
yamyでは1行だったんだよな
2023/10/01(日) 09:37:27.76ID:1MOKFxYN0
>>608
修飾キーっていうのは単独押しでは作用しないから修飾キーなわけでしょ
例外はWinキーで、これは単独だと離したときにスタートメニューが発動するから成立している
これを無変換に当てはめるとすると、離したときにBSが発動してたらキーリピートになりようがない
だから前のレスで書いたように、押下時間でリピートになったり、修飾キーになったりみたいな
仕組みにする必要がある
ただBSなんかは瞬時に発動してくれないとイラつくだけだと思うんだよね
修飾キーのつもりで押したのに文字が消えたとか誤爆もあるし
修飾キーっていうのは単独押しでは作用しないから修飾キーなわけでしょ
例外はWinキーで、これは単独だと離したときにスタートメニューが発動するから成立している
これを無変換に当てはめるとすると、離したときにBSが発動してたらキーリピートになりようがない
だから前のレスで書いたように、押下時間でリピートになったり、修飾キーになったりみたいな
仕組みにする必要がある
ただBSなんかは瞬時に発動してくれないとイラつくだけだと思うんだよね
修飾キーのつもりで押したのに文字が消えたとか誤爆もあるし
612597
2023/10/01(日) 10:23:09.43ID:IXVZWApm0613名無しさん@お腹いっぱい。
2023/10/01(日) 18:48:40.48ID:MIF/cMMY0 クリップボードに画像ファイルがコピーされた時に、それを開いて画像データをクリップボードに持つようにしたいのですが、どう書くのがいいでしょう?
powertoyでもできたりしますか?
powertoyでもできたりしますか?
2023/10/02(月) 07:50:12.52ID:Y0OCwQiz0
>>613
正:それを開いて画像データをメモリに持つ
誤:それを開いて画像データをクリップボードに持つ
ということ?
Win10/11 以降の Snip & Sketch/Snipping Tool なら特に何もせんでも
頭36yte分の Clipborad の header/Signature? を読み飛ばしゃ PNG の
画像データがそのまま入ってる。
それ以前の場合はちょっと面倒で、歴史的経緯?でちょっと古い形式での
Windows BMPデータが入っているっぽいので色々と変換せんと、今どきの
BMPデータにならない。
正:それを開いて画像データをメモリに持つ
誤:それを開いて画像データをクリップボードに持つ
ということ?
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 の場合は、{} が来たら例外的に関数本体として扱われるようになっていて便利だ
() => 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
エクスプローラーで使用しています。
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
エクスプローラーで使用しています。
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
エクスプローラーで使用しています。
IME.ahk を使用しています。
文字入力中(名前の変更や検索欄入力)だった場合は、 a
そうでない場合は、+^a のスクリプトにしたいのですが
下記の方法だと文字入力中の判定がうまく出来ないので
教えていただきたいです。
a::
If IME_GetConverting() = 0 {
Send, +^a
}else{
Send, a
}
Return
2023/10/02(月) 22:31:01.66ID:JWMVaWUA0
2023/10/03(火) 17:39:12.06ID:2DNPH3ID0
>>618
あなたがやりたいことは>>581の方法で実装できます
ただし、検索欄等のキャレットは取得できないかもしれないので
その場合は ControlGetFocus でコントロール名を照合するなどの別のアプローチが必要になるかもしれません
蛇足ですが IME_GetConverting() は変換候補ウィンドウが表示されているかどうかを判別しているだけなので
直接入力時や変換未確定(文字列に下線が付いてるだけの状態)時は文字入力中と判断されません
また、IMEの仕様上の問題で別のプロセスから入力コンテキスト(変換中の情報)を取得することはできないので
外部アプリの文字入力中かどうかの判定にはそのアプリに適した様々な方法を試す必要があります
あなたがやりたいことは>>581の方法で実装できます
ただし、検索欄等のキャレットは取得できないかもしれないので
その場合は ControlGetFocus でコントロール名を照合するなどの別のアプローチが必要になるかもしれません
蛇足ですが IME_GetConverting() は変換候補ウィンドウが表示されているかどうかを判別しているだけなので
直接入力時や変換未確定(文字列に下線が付いてるだけの状態)時は文字入力中と判断されません
また、IMEの仕様上の問題で別のプロセスから入力コンテキスト(変換中の情報)を取得することはできないので
外部アプリの文字入力中かどうかの判定にはそのアプリに適した様々な方法を試す必要があります
2023/10/03(火) 19:30:40.48ID:759jFrqH0
2023/10/04(水) 18:56:24.73ID:tIruFCPa0
重い腰を上げてようやくv2に移行したがv2最高だわ
普通の文法のプログラムが書けるというすばらしさ
v1のサポートさっさと打ち切ってネット上の醜いv1のコード駆逐してほしい
普通の文法のプログラムが書けるというすばらしさ
v1のサポートさっさと打ち切ってネット上の醜いv1のコード駆逐してほしい
2023/10/04(水) 22:35:25.70ID:kSzEGkao0
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ヶ月勘違いして数日前に実装されたのかと勘違いして返事してしまった
関数本体を宣言できる機能が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
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 くらいの変化に感じる
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
```
これまで、引数のデフォルト値などは 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 という変数自体が存在しないのでエラーになる
}
```
なぜ 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
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)
}
前にループで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:yx819iOD02023/10/13(金) 20:31:04.41ID:lUFs50Mf0
v2使ってます
ダブルクオーテーションで囲んだ変数を展開する方法はあるでしょうか?
調べてみたらv1の頃はできたっぽいんですが…
以下は例で、本当にやりたいのはテキストファイルに書いておいた文字列が含む変数を展開することです
v := "「A_AhkVersion」"
MsgBox v ; A_AhkVersionと表示されるのを2.0.10とかにしたい
ダブルクオーテーションで囲んだ変数を展開する方法はあるでしょうか?
調べてみたら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::
は動きませんでした
はどうやって書けばいいでしょうか?
~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つ以上の同時押しを認識できない場合も多々あるのでそこら辺は環境による
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の代わりにならない
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::を設定していると動かなくなります
同時併用はできないでしょうか?
ありがとうございます
アドバイス通りにやったらうまくいきました
#If GetKeyState("SC07B", "P") && GetKeyState("SC079", "P")
i::
SendInput, {Up}
return
#if
ところが次の問題が~sc079 & i::を設定していると動かなくなります
同時併用はできないでしょうか?
2023/10/14(土) 08:08:17.62ID:DXkbEwUP0
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
実際にどういう書き方をしているかはわからんけど、おそらく #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]%
みたいな
どうにかならないかと思ったけどあんまりどうにもならなかった
ローカル変数を扱いたいときだけ列挙してクロージャにして渡して
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関数でどうとでもなるので別にいらないのでは?とも思う
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
2023/10/14(土) 21:33:45.85ID:3TcJyM+70
645633
2023/10/15(日) 13:03:37.69ID:/B+GGiqI0 お返事をくださった皆さん、ありがとうございました
書き忘れてましたがv1でのやり方はご指摘の通りTransformでした
使う変数は組込変数で、使う場面も限定されるので、連想配列で工夫したいと思います
書き忘れてましたが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) "月のはずです。"
), "テストメッセージ")
}
ただし、公式記法と違い文中の"は`"のように明示的にエスケープする必要がある
その他の自動インデント判定等は普通に機能する
だいぶ前のレスで上記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
"」です。"
,"テストメッセージ"
)
}
とか書けばいいだけだし、二番目の例だと逆に可読性が低くてメンテナンスに問題出やすい
それに仕様の穴を突くような変態表記していると、本体更新で後々にバグとして顕在化してきて支障が出る
最初の例だと
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
過去の資産のあるゴミ言語から
資産のないゴミ言語になった
資産のないゴミ言語になった
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相を「こんなバカ」呼ばわりで物議…人気ミュージシャンが声明「感情的で稚拙だった。適切な言い方でなかった」 [muffin★]
- 【物価高対策】「おこめ券を配布しません」大阪府交野の市長が明言「経費率が高い」「今高い米をムリして…」 [1ゲットロボ★]
- 芸能界ケンカ最強番付を発表「リングなら岡田准一」 横浜流星&新田真剣佑の名前も 1番強いのは誰か [牛丼★]
- 「報道特集」山本恵里伽アナ、日中緊張で「当たり前のことがはっきり言いづらい空気…ショック」 [首都圏の虎★]
- 中国通ジャーナリスト「高市首相が反省、撤回必要ない…こういう外交待っていた」「日本のレッドラインを明確に示した」 ★2 [お断り★]
- 落ち度はゼレンスキー氏に 内政混乱、市民怒り [蚤の市★]
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1812
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap605
- とらせん IP
- こいせん 全レス転載禁止
- 巨専】 ★3
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1811
- ルセラフィムのスパゲティて曲にめちゃハマってる。ガチのまじで毎日聴いてるわ。多分ネトウヨ以外の日本人皆聴いてると思う [881676371]
- 【実況】博衣こよりのえちえちラムベガス🧪★6
- 高市早苗に3,000万円の献金を渡した団体、限界突破wwwwwwwwwwwwwwwwwwwwwwww [329329848]
- おさかなさんあつまれえ
- 八奈見杏菜ちゃん生誕祭画像スレ
- ワクチン打っちゃった正直な理由WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
