[過去ログ] AutoHotkey スレッド part30 IDのみ (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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
上下前次1-新書関写板覧索設栞歴
あと 370 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s