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) 現在、MouseGestureL.ahkのみを使っていますが、キーのリマップもしたくてautohotkeyも
使おうかと思っています。今の状態からautohotkeyを使うには、autohotkeyを新規に
インストールすればいいのでしょうか?それとも、MouseGestureL.ahkを使用しているならば
autohotkeyをインストールする必要はないのでしょうか? >>746
エクスプローラー以外のソフトの話ってことなら右ドラッグ使うソフトなんて限られてるだろうからジェスチャー無効に入れちゃうか
右ボタン始動で使ってないジェスチャーにMG_Abort()を割り当てるのが無難
割り当てるジェスチャーは右ボタンを放す前の段階ね プラグインの導入状態とか、設定の変更状況とか、
不具合があるにしても発生条件が限られるかもしれないから
切り分けのためにConfigフォルダとPluginsフォルダをバックアップの上いったん削除して、
初期設定状態でも発生するかどうかを確かめてみたらどうだろう みなさんレスどうもです
まずうちの環境
MouseGestureL.ahk Version 1.33
AutoHotkey Version 1.1.32.00 (U64.exe)
Windows 10 Home 1909 18363.693 (64bit)
Windows10のエクスプローラでも右ドラッグが強制解放時間で途切れる
エクスプローラのコンポーネントを使ったファイラーでファイル操作するときに右ドラッグを使うので困る
> ConfigフォルダとPluginsフォルダをバックアップの上いったん削除して、
> 初期設定状態でも発生するか
やってみました 発生しました
今のところ発生しない条件の切り分けができないので、強制解放0秒で無効化して使います >>753
そっかー
お役に立てないけど
とりあえずOSがWin10 Proであること以外はそちらと同一の環境で
初期設定・プラグインなしに戻して(強制解放3秒設定のままで)
アイコン右ドラッグして15秒以上押しっぱなしにしても強制解放は起こらず、
ボタン離したタイミングでコンテクストメニューが出るので
こちらでは正常に修正されているように見えます…と現状報告 俺はHomeだけど問題ないよ
エクスプローラのコンポーネントを使ったファイラーとやらが影響してるのでは?
具体的にはターゲットの エクスプローラー ⇒ アイコン の中で使われてる MG_TreeListHitTest() という関数の判定とかに
別PCとかで試せる環境があるなら比較してみたら良いかも 悪気はないのは分かるけどさあ
最初に不具合報告した段階で、「エクスプローラのコンポーネントを使ったファイラー」を
エクスプローラーと称していたから、このスレの他の人と話がかみ合わなかったんだよ
しかもなぜか未だに、その何とかファイラーとやらの正体を明かさない始末だし
こんなんじゃ作者も検証のしようがないだろうと ああまだ普通のエクスプローラーでもなるのか
その点は謝る
申し訳ない >>757
そうです、あくまでWiundows10標準のエクスプローラで起きている問題の報告です
ファイラーの方は単なる具体的な使用例で、エクスプローラの問題が解決すれば
それに引きずられて一緒に解決するだろうと期待しているだけなので、気にしないでください chrome とかのブックマークを右クリックして編集しようとすると、右クリックメニューが表示されずにキャンセルされるのはおま環でしょうか?
ジェスチャーを無効にすれば、問題なくメニューが出ることは確認しています。 >>746
1.33 デスクトップの壁紙の上で右ドラッグしてそのままホールド
数秒で解放される
コンテキストメニュー出現
強制開放は0で使うのが無難だね >>759
もしRB_でアクティブ化になってたら無効にしてみるとか >>760
>デスクトップの壁紙の上で右ドラッグしてそのままホールド
何のためにそんな操作すんの? アイコン範囲選択して削除やコピーしようとしてる時…とかかな
知らんけど
アイコン上で開始する右ドラッグや
ジェスチャー対象外に設定したウィンドウ上での右ドラッグを除けば
強制解放が実施されるのは「仕様通り」だから
>>760は正常な動作
回避したいなら本人が言ってる通り0で使えばいいと思う
アイコン上で右ドラッグ開始してるのに強制解放されたら異常
俺の環境では異常はない >>759
おま環じゃない
それはブラウザのサブターゲットに
ウィンドウクラスChrome_WidgetWin_2を登録して
RB_にMG_Abort()を割り当てればいい >>764
Chrome_WidgetWin_2とかそういうクラス名ってどうやって調べてる? Chrome使ってないからそこがピンポイントで取れるかどうかは試してないが
MouseGestureLの設定画面からターゲットタブで
種別を「ウインドウクラス」にして入力補助をクリック
→取得したいウィンドウで右クリック
ってやれば「値」欄に自動で入ると思う まあね、強制解放ってそもそも押しっ放し病対策なわけだから
それに悩まされてない人は0にしとけば良いと思う >>766
ありがとう
そのやり方でやっててピンポイント取得できなかったから気になって聞いたんだ
説明不足だったすまない >>768
AutoHotkeyの右クリックメニューにある「Window Spy」を開くと
アクティブウィンドウの情報を取得できる、クラス名もある ホットキーでタスクバーの通知領域のアイコンを左クリックする動作は、
どのように定義すればいいのでしょうか?現在は下記のやり方でやって
いるのですが、もっとスマートにアイコンのクリックを再現したいです。
!1::
Send, #b
Sleep, 10
Send, {Right}
Sleep, 10
Send, {Enter}
Return >>770
PostMessageを使う
!1::
DetectHiddenWindows, On
PostMessage, 0x111, wParam,,, WinTitle
return >>761
指摘の通り、デフォルトにRB_でアクティブになる設定があり、
無効にしたら現象が発生しなくなりました。
>>764
記載の方法で解決できました。
ありがとうございました。 スクリプトというものが全く分からないので
「ウィンドウが最大化でない時は最大化する/最大化の時は元に戻す」
というアクションを代わりに書いてくれる方いましたらお願いいたします if(MG_Win("MinMax")=1){
WinRestore
}
else{
WinMaximize
} >>775
自分で使ってたから、デフォルトであるかと思ったら見当たらなかった。
下記のでいけるはずです。
;最大化/元の状態
WinGet,MinMax,MinMax,A
If MinMax=1
WinRestore,A
Else
WinMaximize,A できましたありがとう
ところでみんなこういうのってなに見て学んでるの? >>778
何の言語でもいいからプログラミングある程度できるようになれば余裕
あとは少し構文調べればできる >>778
http://ahkwiki.net/
ahkは流行らせようとした先人のおかげで日本語の解説も豊富 >>778
自分はプログラミングはロクに分かっていないが、誰でも使いそうな基本的なアクションなら
ググる・ヘルプ・wikiのどれかで大半は何とかなってる
>>775くらいのなら 「最大化 元に戻す MousegestureL」で、すぐに見つかるでしょ
MousegestureLをAutoHotkeyにしてググって参考にしてもいいし 「ググればわかる」
「公式読めばわかる」
「プログラミングやったことあればできる」
経験者はいつもこう言うけど
ほとんどの素人は理解できずに詰んでますw そういうの読むとテンプレートのスクリプトがどんな意味なのかなんとなくわかった気にはなれるけど
「じゃあ1から書いてみて」とか言われたらもうお手上げ
既存のものをちょっと改変するくらいが関の山だわ >>778はアクションスクリプトが書ける程度を求めてるんだから独立したスクリプトを1から書けるってところまでは求めてないでしょ
他人が書いた短いスクリプトの中身と動作を照らし合わせたり、ちょっと変えたりしてみるってのは順当な学び方だと思うよ
AHKもプログラミング言語の1つではあるけど、プログラミングを勉強しろってのは言い方として突き放し過ぎ >>783
実際プログラミングある程度やったことある人は構文ググったり公式読めばわかるしなー
理解しようと努力してないんじゃない?
プログラミング素人ならちょっと調べてすぐに理解できないのは当然じゃん
そこまでやる気ないなら諦めるのは正解じゃね? AHKを初歩から学ぶなら上の書籍が最適解だと思うけど
AHKなんて仕事に使えるわけでもないから
わざわざこれを勉強しようなんて人はそうそういないだろうけど >>787
スクリプト書けないからってムキにならないでww どんな事でも、出来る人は出来ない人の気持ちが解らないもんだ。
教え方が上手な人は貴重だし、親切で教えてくれる人はホント神。 >>788
むちゃくちゃ仕事で使ってたわ
今ほどコンプラうるさくなかったから割と好き放題やってた X1/X2のジェスチャ設定方法がわからないので教えてくれ
ツールチップにはX1BとかX2Bと表示されるのに設定したはずのジェスチャが動作しない
そもそも、ジェスチャ設定タブで設定するとき、右クリックとかだと「押し下げ→押上げ」で
設定できるがX1/X2だとL、「X1B_ ̄」と設定できず「追加」ボタンがグレーアウトになってしまう
X1/X2には押し下げ→押上の概念がないのか?マウスジェスチャにX1/X2ボタン使ってる人いたら教えて >>793
普通に設定できてるよ。何がダメなのかは分からないが
>「追加」ボタンがグレーアウトになってしまう
なら、設定できてないわけだから
>設定したはずのジェスチャが動作しない
になるのはそうだろうなと ブラウザ上で右クリック+←↑で全画面のオン、オフの切り替えを割り当てる事ってできますか?
一つのジェスチャーに一つの操作だけでしょうか? すみません、全画面ではなくウィンドの最大化と元の大きさに戻すです
ショートカットキーが違うと無理なんですかね? 似たような質問がないか
「最大化」でスレ内を検索してみようとか思わないんですかね? エクスプローラーのうち、デスクトップだけ違うアクションを割り当てたいのですが
どのようにターゲットを指定すればいいのか教えてください >>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, .. 」になってしまう ■ このスレッドは過去ログ倉庫に格納されています