MouseGestureL.ahkを流行らせるスレpart2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
MouseGestureL.ahkとはAutoHotkey_L上で動作する凡用マウスジェスチャーソフトです。
作者様のユーザーインターフェース大幅な改良にともない設置も簡単になりました。
基本的な用途であればスクリプトを意識せず全てのWindowsソフトでジェスチャー操作が可能になります。
使い方について語ったり、スクリプトについての質問・解答・提案等を書き込みましょう。
配布元 公式:
http://hp.vector.co.jp/authors/VA018351/mglahk.html
Autohotkey関連ファイル専用アップローダー:
http://ux.getuploader.com/autohotkeyl/
前スレ:
http://anago.2ch.net/test/read.cgi/software/1384313234/
テンプレは>>2-10くらい 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) エクスプローラーのうち、デスクトップだけ違うアクションを割り当てたいのですが
どのようにターゲットを指定すればいいのか教えてください >>801
エクスプローラー→サブターゲットを追加
→コントロールクラス→SysListView32 >>803
>>801は、エクスプローラーでデスクトップを開いてる時の
ジェスチャーだけ違うのにしたいって事で
エクスプローラー→サブターゲットを追加→
タイトル→デスクトップ
みたいな感じで良いんじゃないかと思ったんだけど、
デスクトップを直接表示させてる時のジェスチャーを
変えたいって事だったのかな。 言われたとおりにしても期待通りの動きになってくれなくてなんでだろうとあれこれ眺めて
「ターゲットの優先順位」って項目にようやく気付いた
うまくできましたありがとう RB_のアクティブ化処理について
メモ帳などの「保存しますか」系統の小さなウィンドウでは、
そのウィンドウ外部からのジェスチャーを入力させたいと思いました。
(例えばRB_DR_で!{F4}、RB_WD_で{Right}、RB_DU_で{Enter}とすると、
小さなウィンドウまでカーソルを持っていくより楽に「保存しない」が選択可能)
そこで以下のように、現在アクティブなウィンドウのサイズで条件分岐しました。
(小さければアクティブ化処理をしない)
しかし、サイズ指定では都合が悪いサイズの確認ウィンドウが表示されるソフトもあり、
もっとスマートな方法はないものかと考えているのですが、何か案はありますか?
[RB_]
;アクティブ化
minWidth := 370
minHeight := 200
WinGetPos, , , width, height, A
If ((width > minWidth) OR (height > minHeight))
{
MouseGetPos, , , underMouseID
WinActivate, ahk_id %underMouseID%
} >>807
横からですが、
AHKに正規表現のマッチ演算子(~=)ってあったんですね。勉強になりました
ありがとうございます >>807
ありがとうございます。テキストから判断する方法、いいですね。 >>807 ちょっと訂正
"Button\d+" → "^Button\d+$" 「ターゲットとなるウィンドウの特定の位置を左クリック」というアクションをさせたいのですが、
どのようなスクリプトにすればいいのか教えてください >811
実際に使っているものです。
適当なジェスチャーに割り当てて使ってください。
私はRB_RLRD_に割り当てています。
CoordMode, Mouse, Relative
If (GetKeyState("Shift", "P"))
{ ;Shiftを押していれば、ターゲットのIDと座標を記録
MouseGetPos, , , WindowID
BackClickMouseX := MG_X
BackClickMouseY := MG_Y
} Else
{ ;Shiftを押していなければ、記録していたターゲット上の座標をクリック
CoordMode, Mouse, Relative
ControlClick, X%BackClickMouseX% Y%BackClickMouseY%, ahk_id %WindowID%
} これまんまコピペしてから
Shift押しながらアクション→アクションで合ってます?
動いてくれないんですが >>813
あなたの意図と>>812が噛み合ってないような気がするが、それは説明が足りないからだと思わないと
せめてもっと具体的にこうしたいというのを書くべき
ターゲットとなるウィンドウ→何のアプリ? もしくはサイト?
特定の位置→常に固定された1ヶ所でOK?
詰まる所、どうなれば目的が達成されたと言えるのか
そもそも、丸投げで済ませようとするから、どこが意図と違うのか説明できないのでは? >>812です。
俺環で使えてたけど致命的におかしかったので修正。
トリガー(RB_など)に後述@を設定して、
適当なジェスチャー(RB_RLRD_など)に後述Aを設定する
多分これでいいはず。。。
;@
If (GetKeyState("Shift", "P"))
{
CoordMode, Mouse, Relative
MouseGetPos, startRelativeX, startRelativeY, startWinID
}
;A
CoordMode, Mouse, Relative
If not (GetKeyState("Shift", "P"))
{
ControlClick, x%startRelativeX% y%startRelativeY%, ahk_id %startWinID%
} >>814 ありがとう。過去に自分も丸投げ質問してしまった引け目から、
贖罪のつもりで回答しています。
ところで、
"Shift"の部分を変数で指定したいのですが、ダブルクオーテーションの都合なのかうまくいきません。
解決策わかる方教えて下さい。
startVarKey := Shift
If (GetKeyState("%startVarKey%", "P"))
のような感じで書きたいです
"の位置を変えてみたり2個つけてみたり、いろいろ調べたんですけど解決できず。。。 startVarKey := Shift
If (GetKeyState(startVarKey, "P"))
で出来ました。当たり前ですね。失礼しました。 startVarKey := "Shift"
If (GetKeyState(startVarKey, "P"))
Shiftに"をつけ忘れたので修正。連投失礼 >>816
希望通りの動作なことを確認できたよありがとう
ただ使いたかったゲームの場合、クリックさせたいアイコンの上にマウスポインタを乗せて選択状態にしてないと反応しないようで
残念ながら使えなかった えぇ… 95%まで作ってもらったのに自分でほんの少しのひと工夫もするつもりないんかい
使えないって、あとは選択状態にできればいい話じゃないの
そういうことされると教えてくれる人が減ってしまうがな
ありがとうとは言ってるけど、多少なりとも自分で何とかしようとしてるかどうかは伝わるもんだよ 損するのは彼ですし、自分のすべきことはしたので気にしていませんよ^^;
ところで別件の質問です。
AHKで、キーボードでマウスカーソルを動かすスクリプトを作りました。
変換キーを押すたびに、キー入力モードとマウスモードで入れ替わります。
マウスモードでは、LキーDownを右クリックDown、LキーUpで右クリックUpにしています。
このLキーをトリガーとしてMGLのジェスチャーを使うために、
MGLにLキートリガーのジェスチャーを登録したいのですが、
Lトリガーアクションの発動条件を、変換キーによるトグル状態によって分岐したいわけです。
(つまり、マウスモードのときのみそのトリガーを有効化する)
そのトグル状態さえ取得できれば、Lトリガー単体のアクションで、
単にLを入力するか、ジェスチャーを認識するか分岐できることになりますよね。
しかしAHKとMGLは別として実行しているので、変数の共有はできないと、私は認識しています。
ではどうするか。次の方法を考えましたが、スマートとは言えません。何かご教示頂けると幸いです。
@ MGLに変換トリガー単体のジェスチャーを登録して、そこでトグルする。
→AHKとMGLの起動・終了タイミングを揃える必要がある。
→モードトグルのトリガーを変更したいとき、AHK,MGL両方で書き換えが必要になる。
➁AHKでマウスモードになったとき、同時に適当なMsgBoxを出しておき、MGL側でそれを認識する。(WinExist)
→ダサい
BAHK側で、マウスモードになったときにToolTipを右下で常駐する設定にしてあるため、そのツールチップを取得する。
→書きながら思いついたけど、これが可能なら結構イケてる。 あ、あとスレ立て慣れてる方いましたら、AHKスレPart28立ててくれませんか?(小声)
立て方も、しきたりも、よくわからず… onMessage()でよくね?
スレ建てはできなかったので他の人よろしく 特に何もしていない人間が「教えてくれる人が減ってしまう」って気にするのも余計なお世話だよな。
ならお前がなれば? というか状態が問題ならマウスカーソル実際に移動させりゃいいんじゃないの?
俺はマウント民の821や826とは違うから書いてあげるね。
; アクティブウィンドウ左上からの相対座標にする。
CoordMode, Mouse, Relative
; マウスを指定した座標に移動する。3つ目は 移動速度。
MouseMove, ???, ???, 0
Send, {LButton}
; マウスを元の位置へ戻す。
MG_Move()
???は座標の数字ね。 >>828
ありがとうございます。
マウスを動かすスクリプトは既に書いておりまして、
左ホームポジションにカーソル移動、右HPにマウスボタンを当てています。
ただ、例えばRB_xxxをMGLに認識させるためには、
Lキーで{RButton Down}にした状態で動かせばよいわけではなく、
実際にマウスの右クリックを押さなければならないんですよね。
(GetKeyStateで判定されている?)
そのために、トリガーをRBと分離して定義して、
ジェスチャーもトリガーラベルを書き換えたものをちまちま追加していかないといけないのかなと思っています。
(例えばRB_UD_があれば、LKey_UD_を、同じアクションのジェスチャーに追加)
MGLの元ファイル群はできればいじりたくないので、その方法を思案中です。
(いじりたくないのは、コードの理解できていないため
エラーが起きても対処ができないからです。) なぜかこいつがお礼言ったせいで
>>811がすごい勢いで成長したのかと勘違いしたわ 828はマウント民と違うとか言ってる以上、最後まで面倒見てやれよ なるほど
解決まで持っていけなかったから悔しかったのか おっ、わざと誤読することで効いてないアピールするレスバ敗北者あるあるじゃん そんな分かりやすい反応したら、デカい口叩きながら中途半端にしか対応できなかった
>>828だとバレてしまうがなw
どういうタイプか見抜けなかっただけの話だから自業自得でしかないが なぜか解決してないとか中途半端とか言い張ってる奴いるけど
828でできてるじゃん 気軽に煽れる相手と思ったら殴り返されて引っ込み突かなくなったんで自分の願望を連呼する
っていうよくあるパターンじゃん
もうほっとけ、そいつはもう手遅れだ そのすぐ下の>829でそれじゃ解決しないって質問者がレスしてたわけだが >>829
>ちまちま追加していかないといけないのかなと思っています。
MousegestureL.ahkを終了した状態で
MousegestureL.ini を開いて右クリック発動のジェスチャーすべてをコピペして
"[RB_" を "[LKey_" に置き換える
>>822 のB
ツールチップ取得で分岐するなら
ahk_class tooltips_class32
ツールチップのテキストも分岐に加えるといいかな >822はonmessageでAhk間通信が楽だしスマートと思う
AHK側でイベント登録して通知待ち受け
MGLからsendmessageで状態訪ねられたら今のモードを返す >>822です。
みなさんありがとう。今ちょっと忙しいので、また試してみます。
それと、件のマウス動かすスクリプト、需要あったら公開します(コードきれいにしてくれる人いたら嬉しいなと思いつつ)
>>840
以前、onMessageのドキュメント読んだとき何もわからず放置していましたが、プロセス間で直接やり取りできる機能なのですね、これを本命に、調べてみます。それと、一度回答を見逃してしまっており、申し訳ないです。
>>839
入力内容がいろいろなところに転記されているようで何となく避けていましたが、いけるんですね。その方法でやってみます。正直、MGLのファイル間の関係が良く分かってないので、そのあたりも勉強するつもりです。
ツールチップのテキストについてですが、確かに、その通りですね。現状、とりあえずの策としてツールチップを利用しているので、条件を加えておきます。 「コントロールパネル→サウンド→スピーカーのプロパティ」まで一気に開いてくれるアクションが欲しいのですがどうしたらいいですか?
Run, C:\Windows\System32\mmsys.cplでコントロールパネルまでは行けましたがそこから先が分かりません >>842
そこまで持っていけたのなら、キー操作を追加すればいいのでは?
↑↓でスピーカー選択してプロパティAlt+P キー操作でとりあえず目当ての動きは出来ました
でもキー操作はウインドウを開いてから入力させないといけないようで
Sleep,でやってみましたがどうにもアクションが間延びしますね
まあとりあえずできたんでこれで使っていこうと思います
ありがとうございました もう1つ質問です
ゲームを通常時とフルスクリーン時で違うアクションをさせたいんですけど
最大化のMinMaxみたいに現在の状態を取得する方法ってありますか? >>844
直接飛べるコマンドがあればいいけどね。後はsleepの値を調整で
>>845
似たような質問を少し前に見た覚えがあるから、このスレ内に出てると思う 「フルスクリーン」で検索してたんで気付かなかった
>>710で無事できました >>844
こんなんでどうだろう
Run, mmsys.cpl
oldTime := A_TickCount
While (true)
{
If (WinExist("ahk_exe rundll32.exe", "下の再生デバイスを選択してその設定を変更してください"))
Break
If (A_TickCount - oldTime > 3000)
Break
}
Send, {Down 2}!p >>844
ちょっと修正
Run, mmsys.cpl
oldTime := A_TickCount
While (true)
{
If (WinExist("ahk_exe rundll32.exe", "下の再生デバイスを選択してその設定を変更してください"))
{
Send, {Down 2}!p
Break
}
; 一応タイムアウト設定
If (A_TickCount - oldTime > 3000)
Break
} 「キー操作を発生させる」 から修飾キー + 「 . 」 を入力するとうまく認識されない
「 Send, .. 」になってしまう ホイール関係のジェスチャー後RButtonUpすると
たまに右クリックが発動されるのですが
これは既に知られている不具合ですか? >>851です
マウスのチャタリングっぽかった
MGL関係なさそう ターゲット指定にフォルダ以下全てを指定したい場合はどのようにすればよいのでしょうか?
ゲームフォルダ丸ごと指定したいです >>853
拡張スクリプトのユーザー定義サブルーチンのところに↓を追加
IsTargetInFolder(folder) {
WinGet, path, ProcessPath
return InStr(path, folder)==1 ? true : false
}
ターゲットの設定でカスタム条件式を選択して↓を登録
IsTargetInFolder("C:\Games") ジェスチャ有効無効自動切り替えプラグインと>>854さんのが超便利です。ありがとうございました
ウインドウモードでゲームしてよく切り替えて調べ物とかメモとかするので
今まで手動でoffにしてた(途中のonは諦めてジェスチャ使わなかった)のでマジで感謝です。 PgUpと同様の効果を割り当てるにはどうすれば良いでしょうか?
また、可能なら移動時の描写を消したいのですがVBAで言うApplication.ScreenUpdating = False的な事ってできますか? 移動時の描画なんてのはアプリ側がやってることだからMGL(ahk)側からじゃどうにもならん >>859
>>861
ありがとうございます。
描画停止は調べてみたんですけど、自分には理解できなかった。時間見てじっくり勉強します。 >>861
消し忘れを削除しました
メモ帳で動作テストできます
F1 ウィンドウの描画を切り替え
F2 コントロール(入力欄)の描画を切り替え
Esc 終了 左クリック+ホイール回転のジェスチャーを設定したら、普通に左クリックでドラッグしようとしたときもジェスチャーの待ちが表示されるようになっちゃいました。
普通に左クリックでドラッグをする時にジェスチャー待ちにならないで、左クリック+ホイール回転だけを利用することってできませんか? >>864
まず、ヘルプ3.14. 5. それぞれのボタンにジェスチャーを割り当てるときの注意点を読む
左ボタン始動は推奨されていない。ただ、実装する方法がないわけではない
ヘルプ4.4.4. の中の左ボタンを押しながら右ボタンで右のタブ、その逆で左のタブ を
自分のやりたいことに当てはめればいいのではないかな Ver.1.34 2020/06/04
ヘルプファイルを更新
設定画面の細部の挙動を改善 普通のウィンドウみたいに1px単位で自由にサイズ変更したひ 長年取り残されてたヘルプが更新されたってのが目玉なんでしょ ボタン長押しとそのボタンを起点とするストロークジェスチャーを別個化させる方法はないですか?
ストロークジェスチャーを発動させると長押しのアクションも発動してしまいます >>872
どんなアクションを割り当ててるのか書かなきゃ分らんでしょ
テンプレートから追加した方法で長押しを実現しているならそうはならないはず >>873
別の書き方にしたら無事解決しました
MG_Holdで長押し設定すると同時に発動するようです そもそもMG_Hold()は放してから発動だから長押しにすらならないんじゃ・・・ >>875
ごめんなさい言葉が足りていませんでした
長押しではなく長押しクリックのことです MouseGestureLに、単純なキーリマップ(たとえば"LWin::Ctrl")を追加したいのですが、これはどこへ記述すればよいのでしょうか?
試しにPluginsフォルダにこの一行だけを記述したahkファイルを置いてみたのですが、
プラグインは何かきちんとした様式に沿って書かなければならないようで、MGLの動作がおかしくなってしまいました・・・ >>878
サブルーチンとは違うような…とは思いつつ、サブルーチンのところに書くことでうまくいきました。
ありがとうございます。 設定画面を呼び出すのが面倒なのでジェスチャーでやりたいが上手くいかない
指定した座標までカーソルを移動
右クリック
設定(C)
右クリックまではいいが、その画面が出たままの状態だとジェスチャー自体が反応しない
なんかいい方法ないかな? 解決したみたいで何よりだけど
自分は設定画面呼び出すのにこれ使ってる
if (MG_Defer()) {
MG_Edit()
} こんなクソレス相手に親切にありがとう!
こっちの方が全然いい
使わせていただきますね >>880
一応、ヘルプの「メニューのコマンドをホットキーなどで実行」にあるよ
MG_User..ahkでホットキーを設定してからジェスチャーに割り当てる
>>882さんのやり方の方がシンプルだけどね
設定呼び出しは使う時は頻度が高いから、その他タブのホットキーにあった方が分かりやすいかもしれんね 導入してみましたが、使い方がよくわかんないです。
ただ単にホイールがきかないソフトで、ホイールを有効にしたいだけなんですが
どうすればよいのでしょうか? >>885
その感じのは、自分なら直接AHKでやるかな
AHKスレで聞いた方がいいかも 出来合いのツールを使うだけって感じの人だから>>886は突き放し過ぎではなかろうか
ホイールリダイレクト系ならそれに特化したソフトが他にありそうだしVector辺りで探して見た方が良いかも
MGLで個別設定するとなるとそれなりに面倒だし、AHKスレなんかに行ったらそれこそひどい扱いを受けそう 確かに、リファレンスとログ全部読んでから行かないとシメられそう 「タイトルバーを右クリックでウィンドウを最小化」を実現したく、ターゲットのカスタム条件式に
MG_HitTest()="Caption"
と書いてタイトルバーの判定をさせているのですが、
「マルチディスプレイ環境での、メイン以外のディスプレイのタスクバー」がこの条件にヒットしてしまうらしく、
タスクバーを右クリックした時にタスクバーが消滅してしまいます。
カスタム条件式が悪いのかな・・・と思うのですが、どう書くのが良いでしょうか。 >>890
ターゲットで 全てに一致 にして
ウィンドウクラスで正規表現不一致で
^Shell_.+TrayWnd$ >>891さんご指摘の通りスケーリングをいじっていたので、こちらに書かれていた設定をして、
また>>892さんの条件をターゲットに付け加えることで、うまくいきました。
感謝です! Windows10で、デスクトップのゴミ箱をミドルクリックで空にする方法ってありませんか? デスクトップにするのが煩わしくない?
何かのジェスチャーに FileRecycleEmptyあてればいけると思う 他のタブを閉じる
右のタブを閉じる
左のタブを閉じる
のジェスチャーの設定の仕方を教えて下さい
使ってるブラウザは新edgeです >>896
別のスレで教えてもらった拡張機能との併用で解決しました ある時から右クリックのコンテキストメニューがジェスチャー感知より先に出るようになりました。
直す方法ありますかね? >>898
マウスのチャタリングなら普通に直せる
マウス買い替える人の方が多いと思うけど
「マウスの右ボタン押下で力を入れ続ける」という解決方法もある ■ このスレッドは過去ログ倉庫に格納されています