AutoHotkey スレッド part27

■ このスレッドは過去ログ倉庫に格納されています
2019/04/20(土) 23:32:53.28ID:cTmLtZyf0
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512

■配布元
http://ahkscript.org/download/

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

■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
Autohotkey専用うpろだ
http://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
http://pastebin.com/

■派生版
IronAhk (.NET製、クロスプラットフォーム)
https://github.com/polyethene/IronAHK
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
2020/01/21(火) 12:24:53.35ID:saCoe5B/0
>>726
>>727

ありがとうございました!!
どちらのアプリでもF24を使用することが可能になりました!
2020/01/21(火) 15:27:33.69ID:5Eh+0+HCr
常駐してるahkに記述されてる自作関数をコマンドプロンプトから呼び出すことできる?
----------------------------
func:
msgbox, hoge
return
----------------------------
>>1見たりググったりしたけど答えが見つからなかった。あるのならすまない
最近AHK使い始めて良くわかってないから大目に見てくれ
2020/01/21(火) 18:13:26.37ID:f2QdlUcu0
できない
2020/01/21(火) 20:46:11.39ID:einhiu/Q0
>>729
呼び出し(再起動)
hoge.ahk "関数名" "引数"
hoge.ahk "MsgBox" "Text"

スクリプト
;AES
#SingleInstance Force
if %1%
 %1%(A_Args[2], A_Args[3], A_Args[4])
;Hotkey
MsgBox(Text) {
 MsgBox, %Text%
 return
}
2020/01/22(水) 14:27:34.11ID:RxEen8tTd
去年からAutoHotKey使い始めて
ホームポジションから離れることが激減したのはいいんだが
ノートのキーボードだと同時押しの効かないキーの
組み合わせが機種ごとにランダムに発生するのが悩ましい
特に変換、無変換が絡むと
「こんなキーと同時押しする馬鹿のことなんか
どうでもいいわwww」という
設計者の意図が透けて見えるようだ

会社で支給されるノートが新品になると
キーバインドに違うアレンジが必要になる

プライベート用だとRazerのスリムなノートぐらいしか
俺のニーズにマッチするやつはなさそうなんだが
最近のモデルは右シフト周りのキー配列が
上カーソルに侵食されて好みでなくなってるのが難点
しかし、尊師スタイルはしたくないので
これからはノートを変えるたびにキーボードガチャ
2020/01/22(水) 14:33:37.05ID:o8ep1VOI0
5chで日記書いてる馬鹿のことなんか
どうでもいいわwww
2020/01/23(木) 14:09:10.05ID:z6hrYOWsd
ノートや安いキーボードでの運用について語りたい奴はいないのか

次にノート買うならUSキーボードにしようと思ってたが
USキーボードの右AltをF13にしたとして
致命的にうまく動かないキーコンビネーションがあると
ほとんど詰んでしまうな
JISなら無変換、変換、カタカナキーのどれかが使い物になれば良い
2020/01/23(木) 14:35:41.21ID:yb8NU6QX0
お前のは単なる自分語り
2020/01/23(木) 14:49:25.24ID:TL0iCSLV0
ノートの変態配列についてはahkでどうにかできるレベルじゃないので…
PC買い換えるたびにキー配列で悩むの嫌なんでここ最近はThinkPad一択
デスクトップは安物乗り継いで結局リアフォに落ち着いた
2020/01/23(木) 15:45:22.76ID:z6hrYOWsd
変態配列の話では無く
主に3キー以上同時に押して機能しない組み合わせが
機種によってランダムに発生するという話なんだけどね
NKRO対応なキーボードでない限り
2020/01/23(木) 17:18:39.51ID:yb8NU6QX0
同時押し数は単にハードの仕様であってahkとは全く無関係の問題
いい加減スレチでウザい
2020/01/23(木) 17:23:34.08ID:0B3cOduB0
そういうハードの仕様の場合にahkでどうするかって話じゃないの
2020/01/23(木) 17:26:59.58ID:yb8NU6QX0
>>739
全然違う
2020/01/23(木) 17:28:30.34ID:ytfW8FfG0
そんなハードは避ける
で終わりじゃね
個々のハード依存の話つづけたいのなら、
そのハードのスレ立ててやればいいと思いますし
2020/01/23(木) 17:30:33.60ID:0B3cOduB0
>>740
いや話してるのは君じゃないでしょ
2020/01/23(木) 17:33:47.65ID:yb8NU6QX0
>>741
その通り
大正論

>>742
本人だってそんな話してねえだろ
2020/01/23(木) 17:44:20.06ID:TL0iCSLV0
そういう制約が面倒なのでモデファイヤキー以外をトリガにするのは避けることにしてる

AHK出始めの頃はここや流行らせるページでLocks系キーの
機種依存挙動でわいわいやってたりもしたがもうそういう時期通り過ぎてるというか
20年も使ってると汎用で使えないオレオレ設定は淘汰済みなんだな
2020/01/23(木) 17:55:30.43ID:z6hrYOWsd
>>740
違わねえよ 馬鹿野郎
人の話を聞いてねーのはテメーだ
2020/01/23(木) 18:12:32.28ID:yb8NU6QX0
>>745
どうにもならんもんグダグダ言ってんなよバカガイジ
2020/01/23(木) 18:17:16.67ID:z6hrYOWsd
>>744
そうすれば確かに引っかかる確率は減るだろうね
だけど、片方のAltをF13とかにして
他のキーとの組み合わせでカーソルキーや
ファンクションキーをSendしたとする
そこに残った方のAltも加えて同時押しすると
一部組み合わせが機能しないという悲しいケースもあったよ
左右Alt同時使用は想定外なんだね

デスクトップのゲーミングキーボードなら
何でも普通に動いて快適な状態に慣れてしまったから
ノートでも限界まで追求している

過ぎた話題で興味無いならスルーしてくれればいいよ
他の話題が始まれば俺も遠慮するし
2020/01/23(木) 18:28:56.76ID://gzdVNT0
>>747
>左右Alt同時使用は想定外なんだね

だからそれはハードの仕様の問題であってahkと関係ない
スレチネタで荒らすな
2020/01/23(木) 23:35:40.91ID:nifKxp710
エクスプローラーでアクティブに選択しているファイルを
サクラエディタで開きたいんだけど、サクラエディタ自体は起動するけど
選択したファイルが開いていないです。
どうしたらいいのでしょうか・・・

^e::
Send, ^c
Run, "C:\Program Files (x86)\sakura\sakura.exe" %Clipboard%
return
2020/01/23(木) 23:45:52.17ID:nifKxp710
すみません、sleep入れてコンパイルしたら解決しました・・・
2020/01/24(金) 11:02:24.45ID:NBF8iWUcd
>>748
なんで動かないのかなんて聞いてないし
そもそも俺は質問も相談もしていないし
お前に向けて書いてない
読解力無い癖にゴミのような横槍をこまめに入れるな
面白いことを言えないのなら黙ってろ
なんでお前がレスするんだよ

>>740
>>743
お前は↑でも勝手に俺の代返をしてデタラメ書いて
他のまっとうなレスした人間まで不快にしただろう
ガイジそのもの
お前こそが会話をめちゃくちゃにして荒らしている
お前の見当外れで無駄に攻撃的なゴミレスは無視してきたが、
ここだけレスした意味ぐらい分かってんだろうな?
それもあやしいかな
こんなにもガイジなんだからな

>>741
>>743
何が大正解だ脳障害め
NKRO対応の機種に限定したら軽めのノートは殆ど選択肢から外れる
そういうマシンでAHK運用することに関してテキトーに雑談して何が悪いんだ?
少なくとも明らかにスレチではない
お前の好みの話題でないだけ
上から目線で面白味ゼロのゴミレスばっかしてんじゃねえよ

不愉快なガイジの声ばかりがデカイから、いい加減このスレで楽しむのは諦めるわ
何の面白味も無いゴミ虫め
生きてて楽しいか?
いちいち答えなくていいぞ
2020/01/24(金) 12:06:30.81ID:tzFXc69a0
>>751
あのー他人が不快に思うことを気にしていらっしゃるのならコテハンつけていただけると幸いです。NG入れたいんで…
もちろん書き込みはご自由にどうぞ
2020/01/24(金) 12:26:30.64ID:jm14eODy0
ガイジをNgWordでいいよ
ガイジ連呼する奴にまともなのはいない

ノートの変態配列の場合そもそも右側モデファイヤがない場合もあるので左右で動作分けるとかしないしなぁ
つか複雑なキーバインドは指も頭もついていかん
2020/01/24(金) 12:46:00.52ID:NBF8iWUcd
>>752
お前は >>741 だろ?
だとしたら、お前が不快になることは気にしてない
といちいち言っておいてやろう
2020/01/24(金) 12:53:42.11ID:NBF8iWUcd
>>753
>つか複雑なキーバインドは指も頭もついていかん
あっそ
2020/01/24(金) 12:58:26.14ID:tzFXc69a0
>>753
ありがとうございます。とりあえずそうします

>>754
違います。
どう思われても構わないのでコテハンお願いします
2020/01/24(金) 13:11:19.34ID:RQUs/BcE0
データ整理してたら出てきた、昔の拾い物でカーソルを時計/半時計に回ると左右に動くというものなんですが、
現行の環境では動かないのですがなぜでしょう??
win10でverは1.1.31.00です。
また以下の機能を任意のキーでオンオフ出来はしないでしょうか?
常にこの動作が効いていると困ることが割と想定されるので実装できればと
(改行が多いとのことで複数回投稿します、すみません)

#InstallKeybdHook
high=1 ;高速時のスクロールスピード(1-3)可変
low=1 ;低速時のスクロールスピード(1-3)可変
sens=1 ;感度(1-3)可変
timeout=50 ;タイムアウトまでの時間

upstr=12341234
downstr=43214321
base=567890
StringTrimRight,base,base,%sens%
SetTimer,Rotation,10
Return
2020/01/24(金) 13:12:09.95ID:RQUs/BcE0
Rotation:
If (A_TimeIdlePhysical>timeout)
str:=base
x1:=x2
y1:=y2
MouseGetPos,x2,y2
x:=x2-x1
y:=y2-y1
If (x>0 && y>0)
pos=1
If (x>0 && y<0)
pos=2
If (x<0 && y<0)
pos=3
If (x<0 && y>0)
pos=4
If (pos<>lastpos)
{
StringTrimLeft,str,str,1
str=%str%%pos%
lastpos:=pos
}
2020/01/24(金) 13:12:46.28ID:RQUs/BcE0
key=
IfInString,upstr,%str%
key=Left
IfInString,downstr,%str%
key=Right
dis:=((x1-x2)**2+(y1-y2)**2)**0.5
buf+=dis
freq:=dis*high/50+1
if (buf>100/low && key<>"")
{
Send,{%key% %freq%}
buf=0
}
Return

以上です
2020/01/24(金) 14:54:09.52ID:NBF8iWUcd
>>756
お前みたいなつまらない奴の指図なんか
聞くわけが無いのだから無駄な書き込みやめたら?
こういう返答以外に何を予想してたの?
いちいち答えなくていいけど
放っておけば俺はもう興味を無くして
書き込みやめる流れなことぐらい分かるだろうに
ホントに人の話を聞かない奴ばっか
2020/01/24(金) 15:19:45.51ID:NBF8iWUcd
>>757
汚いレスで遮ったから一応レスしとくか

>また以下の機能を任意のキーでオンオフ出来はしないでしょうか?
任意のキーで適当な変数を書き換えて
処理の本体はその変数の値を見て
IFでスキップすればいいと思うよ

あるいはSuspendコマンドについてググって
何かの役に立ちそうか考えてみたら?(糞適当)
要らないと思うけどw

動かない理由は面倒なのでパス
地道に変数の値をMsgBoxで表示させたりして
自分でデバッグすればいいんじゃないかな
元々頼りない前提に頼ったロジックだと
微妙な環境の変化だけで潜在的な問題が表面化する
プログラムというのはよくあるね
2020/01/24(金) 20:58:35.99ID:NZ31hmj/0
>>757-759
丸投げ質問は誰もまともに答えてくれない

とりあえずそのコードは↓から落としたクルクルスクロールんじゃないかと思う
AutoHotokeyを流行らせるアップローダ
http://lukewarm.s101.xrea.com/up/

ここに、105.zip、108.zip、113.zipとあるから比較してみれば?
2020/01/24(金) 23:17:45.16ID:RQUs/BcE0
>>762
いや、全く各箇所の記述の動作を逐一なんてつもりはないです。
>>現行の環境では動かない といっているように、全く同じ内容で別環境では動いていており
動作の本筋に関しては本質的に間違っている箇所があるとはおもえません。
ただ環境が異なるため、恐らく何かver改訂やOSによる仕様変更のせいで何かが引っかかってると思い、
何か心当たりがあるならそれと照らし合わせもらうために情報を晒したにすぎません。

言葉が足りなくて申し訳ありません。
2020/01/24(金) 23:45:49.31ID:jm14eODy0
全直し希望じゃなくても
人が作ったスクリプトを自分は一切手を着けてない状態で貼ってたら丸投げ言われるわな

おいそれと弄れないにしても自分なりに調べて方向性だけでも書いてそれでいけそうか事前に聞くとかさ
環境依存部分はともかくホットキー起動に関してはいくつかの方法は考えられるでしょ
2020/01/24(金) 23:58:06.64ID:NZ31hmj/0
>>762
あ、そうですか
2020/01/25(土) 01:01:04.90ID:mylHY5dE0
>>764
761氏のおっしゃるようにmsgboxで探すのは質問前からもうやっていますし
最終的には
Rotation:
If (A_TimeIdlePhysical>timeout)
Msgbox,%A_TimeIdlePhysical%
Return
で正常な値がでることも確認しているんでお手上げなんですよ
だから
無変換キーを vk1Dsc07B → vk1D みたいな変更のように
仕様変更だったり、もしくば既知のバグのように
知らなきゃどうしようもないようなことに心当たりありませんかと聴いているんです
検索はすでにしていますが見つからないのでここで訪ねている次第です

それにホットキーに関しては本丸が出来ていないのでまだ取り掛かりようがないです
2020/01/25(土) 02:51:12.13ID:7N2llbO10
>>766
そもそも謎の前環境でも動くわけが無い

> #InstallKeybdHook
> If (A_TimeIdlePhysical>timeout)
> で正常な値がでることも確認しているんでお手上げなんですよ
正常な値なわけが無い、A_TimeIdlePhysicalは対応するフックで動作するので
「マウスフック」を使わなければマウスの動作は無視される

> カーソルを時計/半時計に回ると左右に動くというものなんですが、
> key=Left
> key=Right
> Send,{%key% %freq%}
クリックに見えますが?
2020/01/25(土) 07:14:29.13ID:7N2llbO10
>>767
寝ぼけてたはクリックじゃなくて方向キーか
まあ動かんけど
2020/01/25(土) 15:37:47.39ID:jE5Psj+a0
>>766
MsgBoxよりもTooltipの方がいいと思うよ

うちの環境だと、とりあえず If (A_TimeIdlePhysical〜の2行をコメントアウトして、strに初期値を入れたら動く様になった
TooltipでA_TimeIdlePhysicalを表示させたら、マウスを動かしても上がり続けたので、いっそのことPhysicalとったらリセットされるようになったよ
ただのTimeOut判定だから無くてもさほど困らないだろうし、A_TimeIdlePhysicalにこだわらなくても、自前のカウンターって手もあるね

あと、キー仕様を疑うなら、Sendの行付近に %key% をtooltipで表示して、表示されたキーを押すだけの別スクリプトで試してみるべきだよ
2020/01/27(月) 12:37:39.85ID:EYLpIN0yM
エクスプローラーで選択中のファイルが、特定の拡張子だったときだけサクラエディタで開きたいのですが、うまく動いてくれません。
どうすればよろしいでしょうか、、、

#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
2020/01/27(月) 13:50:13.61ID:ILzVRi6q0
それは「*.拡張子」と完全一致する時しか真にならないから
2020/01/27(月) 14:35:43.55ID:PCCRfwfV0
instrかstringgetposかregexmatchを使う
いずれにしてもワイルドカードは使えないので
正確にやるならお尻から3文字切り出してから比較などの工夫が必要
2020/01/27(月) 16:02:46.81ID:o+dKNXE50
1
セットタイトルマッチモードの仕様が書いてないからどれで突き合わせてるかわからん

2
IF文中にワイルドカードって使えたっけ?
使えたらごめんよ
でもその条件ならIF contains式でいいんちゃう?

3
そもそもの話としてAutohotkeyのClipboard関係は信用が置けないので一工夫がいるのも気をつける
測ってみたところ300ms後にクリップボードがうまるようなファイルもあった
2020/01/27(月) 18:30:10.90ID:dv4SnxNn0
皆様ご回答ありがとうございます。
ワイルドカード使えなかったの知りませんでした、すみません。
おっしゃるとおり、拡張子の3文字を取り出すstringright関数でできました。
大変助かりました。
2020/01/28(火) 04:02:03.76ID:uvycofvT0
>>770
>>772-774
突っ込みどころ満載なので・・・。

フック使って無いのでSendに反応してホットキー無限ループ
複数選択した場合は意図しないことになる
クリップボードのタイムアウト、保管
拡張子を取り出すのに文字数では確実ではない
2020/01/28(火) 04:22:38.07ID:uvycofvT0
なにか規制に引っかかってたのでこちらで

https://pastebin.com/XHbmr3jb
2020/01/28(火) 09:13:48.16ID:N1Ohwwsr0
RegExでやるならループ使わなくても最初の行の最後のドット以降の文字を切り出せるので
もうちょい圧縮はできそう
2020/01/28(火) 09:18:08.14ID:VrzJrfuI0
4文字取り出せばいいだけ
といってもRegEx使ったほうがいいと思うけど
2020/01/28(火) 09:58:42.42ID:uvycofvT0
>>777
エディタでまとめて開くならループが必要

>>778
MS-DOSやWindows3.xまでの(8.3形式)なら拡張子の長さは3文字
今は自由な長さなので文字数指定は使い物にならん
2020/01/28(火) 10:07:38.51ID:S4ZqAouK0
Forループ版
Exts := "ahk,bat,ps1" ;コンマ区切り
Send ^c
For i, v in StrSplit(Clipboard, "`n") {
 SplitPath, v,,, Ext
 if Ext contains %Exts% ;in不可
  MsgBox, %v%
}
2020/01/28(火) 10:24:34.42ID:uvycofvT0
>>780
部分一致は駄目でしょうが
2020/01/28(火) 11:47:45.97ID:VrzJrfuI0
>>779
そんなこと言われなくても分かってる
少なくとも質問者は3文字の拡張子を想定してるから4文字と言っただけ
"."+拡張子でチェックすればいいって言い直さないと理解出来ない?
2020/01/28(火) 13:50:01.87ID:27uwmOduM
当人しか使わない個人的なスクリプトに関しては無理に完璧を記さなくても限られた状況下でだけ動けばいい場合も多いし
利用者本人が想定してないことまで無理に盛り込まんでもいいとは思うね

完全なコードを他人が丸ごと貼ってやっても理解できないことの方が多いだろうし
細かいとこは不完全でも本人が考えて書いたものを問題を感じた時に改修してく感じでいいんでない
多分そういう前提でヒントレスしてる人が多いと思う
2020/01/28(火) 14:58:38.88ID:rsW/ZSX50
USキーボードは変換・無変換無双ができないから
大・大・大・嫌いだわ
2020/01/28(火) 18:46:04.61ID:EA3Cj+61r
動きゃいいだろ
2020/01/28(火) 19:23:28.69ID:Ec0nt9VJ0
>>784
お前の好き嫌いなんて誰も聞いてない
独り言はバカッターで呟いてろ
2020/01/28(火) 20:07:29.82ID:ockOGIFp0
質問です。こういう転記作業ってAHKで出来るのでしょうか?

転記元Excelファイル
転記先IEのシステム

Excelファイルから任意のセルをコピーして、IEの入力欄に貼り付け、
登録ボタンを押下後、またExcelに戻って先程の一行下のセルをコピーして…
の繰り返しの作業です。

なんとなく出来そうな気はするのですが、AHKのスキルってどうやって
勉強したら身に付きますか?
2020/01/28(火) 20:50:59.82ID:n9Nej2Np0
>>787
ひたすらwikiをよく読む
まずはサンプルコード辺り全て理解するまで読む
急がば廻れ
嫌なら諦める
2020/01/28(火) 20:58:15.96ID:hIp7G51I0
そんなのマクロでやりなさいって話だわ
2020/01/28(火) 21:16:05.75ID:N1Ohwwsr0
uwscとかのほうが得意そうな案件ではあるな
2020/01/28(火) 21:34:48.42ID:3FNQgvymM
>>787
その作業は画面見ずにキーボードだけで完結できる?出来るのであれば、その操作通りにsendし、適宜sleepするだけで完成だ。
マウス操作必須だったり、条件で動作が変化するなら、その箇所に処理を加えたり、その箇所の自動化を諦めると良い。
2020/01/28(火) 21:36:17.98ID:uvycofvT0
>>783
当人以外も参考にする可能性が有るので無限ループに陥るようなコードを野放しはあかんだろ
ヒント?出してる方も色々分かってなかったしw
今後の初心者が見てアレが正解だと思われたらまずい
2020/01/29(水) 09:18:20.40ID:QBb2aEnKr
HOOK表記なくてもループにゃならんぞ
やってみ?
2020/01/29(水) 10:54:03.74ID:DzR487gV0
「無限」をはしょるのはすごくもやもやする
2020/01/29(水) 11:15:57.58ID:1KxMz8CE0
OutputVar := GetKeyState(Shift, P)
ToolTip, 【%OutputVar%】, 0, 0

1か0が入ると思ったのに空っぽのように見えるのは
何か根本的に間違えているのでしょうか
2020/01/29(水) 11:19:05.97ID:1KxMz8CE0
OutputVar := GetKeyState("Shift", P)

こうみたいでした。
済みません。
2020/01/29(水) 11:43:53.12ID:pPBTsOGr0
厳密に言うと、"P"もだよ
Pだと変数扱いだから、多分、=0で、記述が無効になってる
2020/01/29(水) 12:01:24.36ID:1KxMz8CE0NIKU
>>797
分かりました
ありがとうございます!
2020/01/30(木) 03:03:10.18ID:hLaC5ZDt0
質問です。
ホットキー指定で~をつけると、イベントを乗っ取らずそのままシステムに通しますが
その後の処理で、システムに通さないよう分岐する方法はありますか?

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

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

; 以下コンテキストメニューを表示してシステムに通さない
2020/01/30(木) 03:06:06.96ID:yfl1OPJr0
ない
2020/01/30(木) 03:25:52.11ID:yIeYXuFa0
>>799
逆にチルダ外して一旦乗っ取って、条件分岐した後に
乗っ取りたくない方は Send, {RButton Up} にしときゃいいんじゃね
2020/01/30(木) 06:48:31.85ID:2Pg1PDf70
>>799
ホットキーの割り当て変更 か 自前でSend
Upを設定すると自動でDownも乗っ取られるから
~つけない場合ちょっと工夫が必要になる


~RButton Up::
if (Flag := !Flag) {
Hotkey, RButton Up, ~RButton Up
ToolTip そのままシステムに通してなにもしない
} else {
Hotkey, ~RButton Up
ToolTip 横取り
}
return

; ------

RButton::
if (!Flag)
Send, {RButton Down}
return

RButton Up::
if (Flag := !Flag) {
Send, {RButton Up}
ToolTip そのままシステムに通してなにもしない
} else
ToolTip 横取り
return
2020/01/30(木) 11:44:29.07ID:lhlDpunT0
>>799
#If 使って事前にはじくとか

#If (CNN()="ListView321")

RButton Up::
Tooltip, Listview
return

CNN()
{
MouseGetPos, mx, my, hwnd, ClassNN
return ClassNN
}
2020/01/30(木) 13:00:18.71ID:hLaC5ZDt0
>>800-803
ありがとうございます

>>803
このような指定方法があるとは知りませんでした
こちらの方法でやってみます
2020/01/31(金) 15:15:41.79ID:Qxhc6BbA0
質問です
MouseGestureL が常に管理者権限で動いている状況下で
後から任意のタイミングで実行するスクリプトから
マウスのボタンの押し下げを知りたい場合に
MouseGestureL の中に "適当な関数名" でGetKeyStateする箇所を
あらかじめ準備しておき、自前スクリプト側で

SendMessage, DllCall("RegisterWindowMessage", "Str", "適当な関数名", "UInt"),,,,
  C:\AutoHotkey.ahk ahk_class AutoHotkey

こんな感じに呼び出していました
最近OSを変えるまではUACを全部切ってたのでこれで問題ありませんでしたが
切らずに運用してみたところ自前スクリプトも管理者権限にしないと
アプリ間通信自体ができないみたいで困ってます
2020/01/31(金) 15:16:15.19ID:Qxhc6BbA0
情報後出しにならないように使用環境も書きます
右ボタン、中ボタン、左ボタンはそのまま、それ以外の残りの5ボタンを
F16,F17,F18,F19,F20キーにマウスドライバ側で割り当ててあり
MouseGestureL側ではこの5ボタンでジェスチャー認識させてます
便宜上子スクリプトと呼びましたが、任意のタイミングで
個別に実行されるスクリプトでMouseGestureLから実行するわけではないです
コンパイルして特定の拡張子と関連付けしてあり
ファイル実行時にこのマウスボタンが同時に押されていたらこのアプリを
こっちのボタンならこのアプリをといった感じでラッパーとして機能させてます

特にアプリ間通信にこだわらず
一般ユーザ権限の子スクリプトがマウスのボタンの押し下げを知る方法ならなんでもいいです
よろしくお願いします
2020/01/31(金) 17:22:07.16ID:s1HRUi470
OSとahkのバージョンは?

win10からはadmin←→非admin間制御系が分断されてるので
UAC切ってても管理者権限で動いてるahkからは一般的権限のアプリの制御ができなくなってるはずだけど
そもそもMouseGestureL はまともに機能しているん?
2020/01/31(金) 17:44:49.94ID:SUSq+Cgw0
>UAC切ってても管理者権限で動いてるahkからは一般的権限のアプリの制御ができなくなってるはずだけど

質問者じゃないけどこれ何言ってんだ?
Win10で管理者権限で動いてるahkから一般権限のアプリは制御できるぞ
一般権限で動いてるahkから管理者権限で動いてるアプリの制御は当然出来ないけど
2020/01/31(金) 18:15:40.06ID:Qxhc6BbA0
レスありがとうございます

OS:Windows10 Home
AHK:v1.1.32.00 - November 24, 2019
MouseGestureL.ahk:Version 1.32 (2020/01/28)

UACは切らずに運用してます
MouseGestureL は管理者権限で起動してます
他のアプリで意図的に管理者権限で起動しているものは
システム監視系のアプリぐらいですが、そのアプリに対しても
一般ユーザ権限のアプリでも問題なくMouseGestureLで制御できています
MouseGestureL から何かを起動する場合はRunは使用せずに
ComObjCreateを利用して一般権限で起動するようにしています
2020/01/31(金) 21:36:49.69ID:v8RZrb+0a
ファイルかクリップボードを経由してやりとりするというのはどう
たとえば
クリップボードを監視して値を要求する特定の文字列が入っていたら
クリップボードに要求された値を返すとか
値を得るタイミングはもっさりするだろうけど
2020/01/31(金) 23:57:38.75ID:Qxhc6BbA0
やっぱりその辺りを経由するしか方法ないですかね
MouseGestureLはとてもいいスクリプトなので
監視ルーチンを寄生させるとかは避けたかったですが

ファイルやクリップボード経由しか手段がないならば
マウスボタンの押し始めタイミング自体は
改変しなくともMouseGestureL側で検知できると思うので
ボタンの押し始めに所定の位置にあるファイル名xxxをyyyにリネーム
ボタンが離されたらファイル名をxxxに戻す
子スクリプトは起動時にそのファイル名をチェック
とかの方法でやってみようかと思いました
アドバイスありがとうございました!
2020/02/01(土) 00:43:32.08ID:ka52WFEb0
マウス操作を記録する機能は持ってないからなあ
AHKスクリプトにするツールもない
2020/02/01(土) 01:59:53.61ID:2stcDCgC0
>>811
方法の前にそもそも何がしたいの?
MouseGestureLでキーに連動して何かスクリプト実行したいならのアクションスクリプトに書けばいい
駄目な理由って何?
2020/02/01(土) 06:49:34.23ID:RcLxcGeu0
やりたいことは>>806に書いた通りです
>個別に実行されるスクリプトでMouseGestureLから実行するわけではないです
>コンパイルして特定の拡張子と関連付けしてあり
>ファイル実行時にこのマウスボタンが同時に押されていたらこのアプリを
>こっちのボタンならこのアプリをといった感じでラッパーとして機能させてます

MouseGestureLとは一切関係なく、ある拡張子のファイルを実行したときに
たとえば拡張子.txtならば本来のメモ帳の前にシステム側から関連付け設定で呼び出され
8ボタンマウスの5つの拡張ボタンのどれかを押す押さないで
実際に実行するアプリをメモ帳から他の物へ変更するラッパーを作ってて
管理者権限でMouseGestureLがつかんでるマウスボタン押下の情報を
一般権限しかもたないこのラッパーに伝達したい、というものです
2020/02/01(土) 08:24:10.05ID:+/Lmpd8T0
未だに何やりたいのかがハッキリと分からないけど、
ファイルをダブルクリック(またはエンターキー押下)した"後"に開くアプリをいくつかの選択肢から選びたい、ってこと?
ならMGL側じゃなく実行するスクリプト側でGetKeyStateして何ボタンが押されてるか取得すればいいのでは?

管理者権限とか一般権限とかの話はよく分からんので適当
2020/02/01(土) 10:26:51.57ID:bRlwZEbJ0
>>815でいい気がするね
>>805は自前スクリプト側でもホットキーを使ってキーの状態を調べようとしたけど、フック順がMGL⇒自前スクリプトだから拾えなかった
みたいな感じなのでは?
2020/02/01(土) 10:34:43.14ID:bRlwZEbJ0
逆だった
自前⇒MGLね
2020/02/01(土) 14:06:32.32ID:3oSMwgZs0
ラッパーって何だYO!
2020/02/01(土) 16:04:24.14ID:ONoXH+kb0
なんか独自関連付けしたいって話に見える
そんならうぷろだに前俺が作った独自関連付けプラグインがあるからそれ見てみりゃいい
2020/02/01(土) 20:38:42.73ID:RcLxcGeu0
説明が拙くて申し訳ありません
目的は関連付けされたコンパイル済みスクリプトの動作ではありますが
そこ自体はちゃんと動いてるので、質問したいのはこのスクリプトが実行される瞬間に
「どのマウスボタンが同時に押されていたか知りたい」ということです

x1 := GetKeyState("XButton1", "P")
x2 := GetKeyState("XButton2", "P")
Msgbox, %x1% %x2%
Return

このスクリプトをマウスの拡張ボタンを押しながらダブルクリックしても
MouseGestureL が動いていると、GetKeyStateではボタンの状態を見れませんでした
MouseGestureL を終了させると拡張1・2のボタンがそれぞれ 1 となります
2020/02/01(土) 20:39:30.24ID:RcLxcGeu0
そこでスクリプトをこうして
DetectHiddenWindows, On
SendMessage, DllCall("RegisterWindowMessage", "Str", "何か適当な関数名", "UInt"),,,, "ここはMouseGestureLのスクリプトまでのパス" ahk_class AutoHotkey
x1 := (ErrorLevel & 2)
x2 := (ErrorLevel & 1)
Msgbox, %x1% %x2%
Return

更にMouseGestureL側のAuto-executeセクションに

"何か適当な関数名" := DllCall( "RegisterWindowMessage", "Str", "WM_USER_XBUTTONREQ", "UInt" )
OnMessage( WM_USER_XBUTTONREQ, "RsvMessage" )

こう書いて、あとはMouseGestureLのどこかに下の関数を定義しておけば

RsvMessage( wp, lp, msg, hWnd ) {
 global WM_USER_XBUTTONREQ
 r := 0
 If( msg == WM_USER_XBUTTONREQ )
 {
  If GetKeyState("XButton1", "P")
   r += 2
  If GetKeyState("XButton1", "P")
   r += 1
 }
 Return r
}

先ほどの子スクリプトはアプリ間でうまく通信してちゃんと
マウスボタンの押し下げを検知します
2020/02/01(土) 20:40:45.88ID:RcLxcGeu0
ただ、OSを入れ替えたのを機にもうさすがにUACを全オフするのはないかなと思い
MouseGestureLを除いて全部一般の権限で使ったらアプリ間で通信できなくなり
代替え案はありませんか?と質問した次第です

現在もMouseGestureLを一般権限で動かせばちゃんと動作しますが
それだと管理者権限でしか動かないアプリを制御できないので案としては除外してます
2020/02/01(土) 20:52:59.53ID:4DvAyfEb0
>>822
じゃあそのスクリプトも管理者権限で動かせばいいじゃん?
2020/02/01(土) 21:25:17.41ID:RcLxcGeu0
>>806,814,820に書いてある通りこれはファイルに関連付けされて動作するスクリプトなので
プロパティから「管理者としてこのプログラムを実行する」にレ点を入れてしまうと
ファイルを開くたびに管理者権限での動作を許可するか確認するダイアログが出るので
とてもとてもやりたくないのです(txt,zip,jpgなど殆どをスクリプト経由にしてます)

タスクスケジューラでタスクを事前に定義しておき
そのタスクの「全般」タグにある「最高位の特権で実行する」にレ点を入れて
Run, C:\Windows\System32\schtasks.exe /run /tn "事前に定義したタスクの名前"
と実行させてUACのメッセージを回避する方法もすでに試してはいたのですが
そうすると実行する度に変化する引数をスクリプトまで渡す方法が見つからずに断念してました
2020/02/01(土) 21:37:19.74ID:4DvAyfEb0
>>824
管理者権限での動作を許可するか確認するダイアログはUACレベル下げれば出ないように出来る
俺もいくつか必要に応じて管理者権限で実行してるからUACの設定下げて確認ダイアログは出ないようにしてる
所詮UACなんて初心者に対する注意喚起でしかないんだから通知オフで何も問題はない
どのプログラムが管理者権限で動いているかをしっかり把握できてりゃいいだけ
2020/02/01(土) 21:51:39.45ID:4DvAyfEb0
ちなみに管理者権限で動いてるスクリプトから一般権限でアプリケーションを起動したい場合は
Run, Explorer "(一般権限で起動したいプログラムのフルパス).exe"
で一般権限で起動出来る
2020/02/01(土) 22:01:30.61ID:RcLxcGeu0
回答ありがとうございます
あと勘違いさせていたらごめんなさい

この問題自体は>>810さんのアドバイスを元に>>811で書いた通り
MouseGestureL側でマウスのボタンが押される度にあるファイルをリネームして
ボタンが離されたら元に戻すというめちゃくちゃなゴリ押しで解決しており
今は望んだ状態で快適に使ってます

なのでもしもアドバイスいただけるとしたら
「自分の希望する前提条件をひっくり返せ」ではなく前提条件の元でなにか他の手段があるよ
だととても助かります、まぁすでに解決済みなので
「そんな手段ないよ」とかでも「ですよねー」といった感じです

>ちなみに管理者権限で動いてるスクリプトから一般権限でアプリケーションを起動したい場合は

の件は>>809に書いてますが
>MouseGestureL から何かを起動する場合はRunは使用せずに
>ComObjCreateを利用して一般権限で起動するようにしています

本家フォーラムにLexikosさんが投稿していらっしゃったのを参考に
ComObjCreate("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}")系でわたしはやってました

教えていただいてありがとうございます
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

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