要望−左トリプルクリックの判定についてNo.05662
Buckeye さん 04/06/28 12:48
 
いつもお世話になっています。

秀丸エディタのキー割り当てで「左トリプルクリック」を使っています。実は、
この機能を一番よく使うというくらいで、毎日、この機能に何百回もお世話にな
っています。

ところが、マウスドライバとの関係か、マシンとマウス、マウスドライバの組み
合わせによってはうまく動かないことが判明しました。ちょっと特殊な使い方を
しているので、そのせいなのだろうとは思うのですが、もし、それほど手間がか
からずに対応できるなら、対応していただけると助かります。

◎設定
マウスの左ボタンに左クリック、右ボタンに左ダブルクリックを割り当て。左右
ボタンを同時に押すことで、トリプルクリックを実現

◎症状
同時押しだと、ダブルクリック動作になってしまうことがある(NTを使っていた
ころは百発百中だったのですが……)

いろいろと試した結果、以下のようなパターンが判明しました。

・左ボタン(down→up)→右ボタン(down→up)……トリプルクリック動作
・左ボタン(down→up)→右ボタン(down)  ……トリプルクリック動作
・左ボタン(down)  →右ボタン(down→up)……トリプルクリック動作
・左ボタン(down)  →右ボタン(down)  ……トリプルクリック動作
・右ボタン(down→up)→左ボタン(down→up)……トリプルクリック動作
・右ボタン(down→up)→左ボタン(down)  ……トリプルクリック動作
・右ボタン(down)  →左ボタン(down→up)……ダブルクリック動作
・右ボタン(down)  →左ボタン(down)  ……ダブルクリック動作

結局、いわゆる左クリックが以下のようなシーケンスが流れてくると、秀丸側で
トリプルクリックと判定せず、ダブルクリック動作になってしまうということの
ようです。

(down→up→down)→(down)
(右ボタン(down)→(左ボタン(down))
普通はありえないシーケンスですね(^^;)

これに対し、トリプルクリックと判定されるものは↓。
down→up→down→up→down(当たり前ですが^^;)
down→down→up→down(down→up→downでダブルクリックという判定が入る前に
トリプルクリックと判定されるため???)

    というわけで、百発百中でないのは、左ボタンが微妙に早ければOK、右ボタ
    ンを微妙に早く押してしまうとダメ、ということのようです。じゃあ、古い
    マウスとマウスドライバならどうして大丈夫だったか??? マウスドライ
    バ側で、ボタンクリック処理を同時にやっていたので、右クリックによる
    (down→up→down)の途中に左ボタンの(down)が出てきていた? 今は
    シーケンシャルになったため、右ボタンが一瞬でも先に押されると、右ボタ
    ンの(down→up→down)出力が終わるのを待って左ボタンの(down)が出力
    される???

素人考えだと、(down→up→down)でダブルクリックと判定したあと、upが来る
までダブルクリックからの長押しによる処理を行うとなっていて、その冒頭、あ
る時間内にもう一回downがきたらトリプルクリックという判定を付け加えるなん
ていうのでなんとかなるとか……?? これだとダブルクリックに対する反応が
落ちる? いや、down→up→down→up→downをトリプルクリックと判定するルー
チンが先にあって、そこでdown→up→down→downもトリプルクリックと判定す
る?

特殊な使い方だというのはよくわかっていますが、おそらく、対応したら他の使
い方で問題が出るものではないだろうとも思います。そして、私自身は、ここ1
年ほど、とても困っている点なのです。マシンをNTからWin2kにしたら、トリプ
ルクリック判定にミスが出ないマウスが手持ちの1個だけになってしまいました。
10年以上もLogicoolマウスを使い続けてきたのですが、Logicoolの新しいマウス
では上記の問題が出てしまいます。仕方がないので他社品をトライしてみたり、
もちろん、Logicoolのサポートともなんどかやりとりしているのですが、こうす
ればいいという解決策が見つかっていません。

もし、対応していただけると助かります。
よろしくお願いしますm(._.)m

Best regards,
Buckeye

[ ]
RE:05662 要望−左トリプルクリックの判定No.05664
秀丸担当 さん 04/06/28 19:25
 

トリプルクリックの件について、ソースを見る限りではダブルクリックのメッ
セージさえ先に来ていれば、down-up-down-downというようになっていても大丈
夫な気がします。
そのマウスドライバの具体的な製品名は何でしょうか。

[ ]
RE:05664 要望−左トリプルクリックの判定No.05666
Buckeye さん 04/06/28 19:48
 
秀丸担当さん、

調べてくださって、ありがとうございます。ソースからは大丈夫そうですか……。
秀丸側でどうにかなる問題じゃないかもしれないんですね(--;)

マウスドライバは、Logicool(www.logicool.co.jp)から落とした↓です。
コントロールセンター Ver. 9.79.025
マウスドライバ Ver. 9.79
マウス LogicoolのMX500(USB接続)

念のため動作環境もお知らせしておきます。Win2k SP4、IE 6.0 SP1です。秀丸
は、現在、4.10β27ですが、現行βの他のバージョンでも今の正式公開版でも、
同じようにトリプルクリックと判定しないことがよく起きていました。

ちなみに、問題なく判定してくれてるのは、↓の条件です。
コントロールセンター Ver. 9.73.243
マウスドライバ Ver. 9.73
マウス MouseMan Wheel(USB接続)←古いマウスでもう売ってない
Win2k SP4、IE 5.5 SP2

Best regards,
Buckeye

[ ]
RE:05662 要望−左トリプルクリックの判定No.05667
アルビレオ さん 04/06/28 20:57
 
秀丸ユーザーのアルビレオです。

>・右ボタン(down)  →左ボタン(down→up)……ダブルクリック動作
>・右ボタン(down)  →左ボタン(down)  ……ダブルクリック動作

マウス関係の常駐ソフトが何も入っていない常態(WinXP Home)で、デスクトップ
上のアイコンに対して上の2つの操作をしてみると、右クリックしたときと同じ
ようにコンテキストメニューが開きました。
つまりこのような操作をしたときはWindowsが右シングルクリックとみなして、
その結果右シングルクリックに割り振られたダブルクリックのイベントを秀丸に
送っているものと思われます。

推測ですが、右クリックしたときの動作を決めているのはマウスドライバではな
くコントロールセンターの方ではないでしょうか?
Windowsが右クリックイベントを発行するとコントロールセンターがそのイベン
トを横取りして左ダブルクリックイベント(WM_LBUTTONDBLCLK)に置き換えている
だけで、マウスボタンのアップダウンイベントを発行しているわけではないと思
います。

[ ]
RE:05667 要望−左トリプルクリックの判定No.05671
Buckeye さん 04/06/29 07:00
 
アルビレオさん、

テスト、ありがとうございます。

各ボタンをクリックしたときの動作を決めているのがマウスドライバなのかコン
トロールセンターなのかは、私にはよくわかりません。ユーザー側から見ると一
体になってしまっているので。ただ、常識的に考えれば、マウスドライバが低レ
ベル側の制御、コントロールセンターがイベント関係の制御というのがありそう
ですね。

>>・右ボタン(down)  →左ボタン(down→up)……ダブルクリック動作
>>・右ボタン(down)  →左ボタン(down)  ……ダブルクリック動作
>
>マウス関係の常駐ソフトが何も入っていない常態(WinXP Home)で、デスクトップ
>上のアイコンに対して上の2つの操作をしてみると、右クリックしたときと同じ
>ようにコンテキストメニューが開きました。
>つまりこのような操作をしたときはWindowsが右シングルクリックとみなして、
>その結果右シングルクリックに割り振られたダブルクリックのイベントを秀丸に
>送っているものと思われます。

コントロールセンターまで入った状態で試してみましたが……右クリックに相当
するコンテキストメニューを割り当てたボタンを押してから左クリックを割り当
てたボタンを押してみると、確かに、右シングルクリック(右ボタンのダウン→
アップ)と同じ動作になるようですね……

>Windowsが右クリックイベントを発行するとコントロールセンターがそのイベン
>トを横取りして左ダブルクリックイベント(WM_LBUTTONDBLCLK)に置き換えている
>だけで、マウスボタンのアップダウンイベントを発行しているわけではないと思
>います。

うーん、ちょっと変な気もするんです。アルビレオさんのお話だと、物理的な右
クリックの直後に左クリックをすると、マウスドライバからWindowsに渡された
時点で単なる右クリックイベントになってしまうということになりますよね。で、
それをコントロールセンターが置き換えている。

マウスを右に置く人と左に置く人は、ふつう、左右ボタン(の割り当て)が逆に
なります。Windowsレベルで物理的な右左を考慮してしまうと、右に置くか左に
置くかで動作が異なることになります。常識的には、そんなこと、しないはずだ
とは思うんですよね。

そっか……どういうマウスイベントが現実に発生しているかを確認してみるのが
一番なんですよね。特に、うまくいかない↓の条件で。
>>・右ボタン(down)  →左ボタン(down→up)……ダブルクリック動作
>>・右ボタン(down)  →左ボタン(down)  ……ダブルクリック動作

一応、アプリケーションの開発環境を持っているので、そっちにイベントビュー
アーがなかったかチェックしてみます(って、もっと前に気づけよ>自分)。い
よいよになったら、マウス左右ボタンのアップダウンイベントだけリストアップ
するアプリを組めばいいはず(開発環境がないほうのマシンが問題のマシンだか
ら、いずれにしてもこっちをやらないといけないのか)。このくらいなら、趣味
でいじってる私レベルでもなんとかなるでしょう。

Best regards,
Buckeye

[ ]
RE:05671 要望−左トリプルクリックの判定No.05672
アルビレオ さん 04/06/29 08:07
 
アルビレオです。

>>Windowsが右クリックイベントを発行するとコントロールセンターがそのイベン
>>トを横取りして左ダブルクリックイベント(WM_LBUTTONDBLCLK)に置き換えている
>>だけで、マウスボタンのアップダウンイベントを発行しているわけではないと思
>>います。
>
>うーん、ちょっと変な気もするんです。アルビレオさんのお話だと、物理的な右
>クリックの直後に左クリックをすると、マウスドライバからWindowsに渡された
>時点で単なる右クリックイベントになってしまうということになりますよね。で、
>それをコントロールセンターが置き換えている。

そんなことはないですよ。
あくまでこの動作からの想像ですが、
ドライバ→Windows→マウスセンター→アプリケーション
という流れだと思います。
デスクトップなどでコンテキストメニューを開いているのはWindows(OS)ではな
く、アプリケーション(エクスプローラなど)だということに注意してください。

>マウスを右に置く人と左に置く人は、ふつう、左右ボタン(の割り当て)が逆に
>なります。Windowsレベルで物理的な右左を考慮してしまうと、右に置くか左に
>置くかで動作が異なることになります。常識的には、そんなこと、しないはずだ
>とは思うんですよね。

これはコントロールパネルの「マウス」の設定の話ですよね?
今回の話題はそれよりあとの部分の話なので、あまり関係ないと思います。

>一応、アプリケーションの開発環境を持っているので、そっちにイベントビュー
>アーがなかったかチェックしてみます

マイクロソフトの開発環境(VisualStudio関係)があれば、Spy++というツールが
入っています。(標準でインストールされたかどうかはよく覚えていませんが)
これで見るとイベントメッセージが送られる順番がツリー構造で表示されるので、
たぶんツリーの上の方にマウスセンターが入り込んでいて、各アプリケーション
に送られるイベントは必ずマウスセンターを経由する形になっていることが確認
できるんじゃないかと思います。

[ ]
RE:05672 要望−左トリプルクリックの判定No.05673
Buckeye さん 04/06/29 09:47
 
アルビレオさん、秀丸担当さん、

MSのVC++は持っているのですが、今のマシンにはDelphiしかインストールしてい
ないんです。DelphiにもWindowsメッセージを確認するツールがあったので、そ
ちらで確認してみました。

結論としては、左右ボタンを押すタイミングによって異なるメッセージが秀丸に
届き、その一方だとトリプルクリックだと判定されない、ということのようです。
判定にミスがないマウスは、どういうわけか、同時押ししているつもりで微妙に
狂うくらいの左右の順序は無視され、左→右とクリックしたときと同じメッセー
ジになるので、必ずトリプルクリックだと判定される、ということのようです。
まあ、マウスが新しくなって微妙な違いまできちんと判定するようになったって
ことで、マウスメーカーに文句を言える筋合いのものじゃないでしょうね(^^;)

細かくは以下を参照していただくとして、どうも、↓の順番でWindowsメッセー
ジが届いたときにもトリプルクリックだと判定していただけると、少なくとも私
の環境ではいいようです。(Menuうんぬんがナニを意味しているのかわからない
ので、他に問題が出そうな処理なのかどうは、私には判断がつきません)

WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
WM_COMMAND Sent Menu 00F7h 247d

以下、秀丸に届いたメッセージから、関係のありそうなものを抽出してみました。

●左クリックのみ
WM_MOUSEACTIVATE Sent LButtonDown

●右クリック(つまりダブルクリックが秀丸に届く)
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
押したママでもクリックして離しても同じ

●左↓右↓(問題なく動作するパターン)
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 00F7h 247d
WM_COMMAND Sent Menu 0021h 33d
WM_COMMAND Sent Menu 0025h 37d
WM_COMMAND Sent Menu 0021h 33d

●右↓↑左↓(問題なく動作するパターン)
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 00F7h 247d
WM_COMMAND Sent Menu 0021h 33d

●右↓左↓(ダブルクリックと判定されてしまうパターン)
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
WM_COMMAND Sent Menu 00F7h 247d

ここまでは、ミスのないもの、ミスの出るもの、2種類のマウスとも同じ。

●同時押し

まず、ミスの出るマウスのパターン

◎トリプルクリックと判定されたとき
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 00F7h 247d
WM_COMMAND Sent Menu 0021h 33d
WM_KEYDOWN Sent 27h 39d VK_RIGHT Scan 00h Down
WM_COMMAND Sent Menu 0025h 37d
WM_COMMAND Sent Menu 0021h 33d
◎ダブルクリックと判定されたとき
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
WM_COMMAND Sent Menu 00F7h 247d

ミスの出ないマウス(↓のパターンのみが出力される模様)
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 00F7h 247d
WM_COMMAND Sent Menu 0021h 33d
WM_COMMAND Sent Menu 0025h 37d
WM_COMMAND Sent Menu 0021h 33d

ついでに、ミスの出ないマウスで「右↓左↓」とすると以下のようなメッセージ
(ミスの出るマウスの「右↓左↓」と同じ)となり、ダブルクリックと判定され
ます。
WM_SETCURSOR Sent LButtonDown
WM_SETCURSOR Sent LButtonDown
WM_COMMAND Sent Menu 005Eh 94d
WM_COMMAND Sent Menu 00F7h 247d

Best regards,
Buckeye

[ ]
RE:05673 要望−左トリプルクリックの判定No.05675
秀丸担当 さん 04/06/29 14:06
 

マウスは無いですが、ドライバを無理矢理入れてやってみたところ、再現させる
ことができました。
トリプルクリックの判定はできていましたが、ボタンが押されたままだとコマン
ドが実行できないようになっていました。
修正させていただきます。

[ ]
RE:05675 要望−左トリプルクリックの判定No.05676
Buckeye さん 04/06/29 14:10
 
秀丸担当さん、

わ、修正、できるんですか!!!

ありがとうございます。修正版、首を長くして待っています。

Best regards,
Buckeye@これで新しいマウスが使えるぞー

[ ]
RE:05675 要望−左トリプルクリックの判定No.05746
Buckeye さん 04/07/03 05:06
 
秀丸担当さん、

Ver. 4.10 β35が出たので、さっそく、新しいマウスを買ってきました。ダブル
クリック割り当てボタン→シングルクリック割り当てボタンの順でクリックして
もトリプルクリック動作に入ることを確認しました。ありがとうございます。

ただ、まだちょっと不具合があります。

    しばらく不在とのことですが、戻られたら、対応をお願いしますm(._.)m

上記の順でクリックすると、まず、ダブルクリックに割り当てられている処理を
してから、トリプルクリックの処理をするんです。トリプルクリックだと判定さ
れたときは、ダブルクリック処理を抑止していただけませんか?

    私の場合は、トリプルクリックに割り当てた処理(マクロ)で、範囲選択し
    ているかどうかで処理内容を振り分けています。ダブルクリックはデフォル
    ト。そのため、選択なしでトリプルクリックしたとき、選択なしの処理をし
    てくれるときと(こちらが操作時に望んだ処理)、ダブルクリック処理で単
    語選択されてしまい、範囲選択ありの処理をされてしまうときがあるんです。

キー割り当てにダブルクリックやトリプルクリックがあるということは、それぞ
れに特殊な処理を割り当てることも想定されているはずです。ということは、一
般に、トリプルクリックと判定したとき、ダブルクリックに割り当てられている
処理もするのはまずいケースが出てくるんじゃないかと思います。逆に便利だと
いうケースも考えられないことはありませんが、実際のところ、必ずダブルクリ
ック→トリプルクリックと両方の処理が行われるようなマウス操作を、毎回、間
違いなくできるというのは、かなり特殊なケースでしょうし(私にはちょっと思
いつきません。そういう順番でメッセージを送るミニツールで作れば話は別です
が)。

よろしくお願いします。

Best regards,
Buckeye

[ ]
RE:05746 要望−左トリプルクリックの判定No.05747
Buckeye さん 04/07/03 06:59
 
がーん……マウスドライバのバージョンダウンができない。前のマウスに戻せな
いんだ(T_T)

一瞬、目の前が真っ暗になりましたが……冷静に考えてみれば、トリプルクリッ
クに割り当てた処理はしてくれるようになったのだから、マクロをコピーして、
トリプルクリックに割り当てるマクロでは選択解除してから処理するようにすれ
ば、当面、不便をせずにすむことに気づきました。

とりあえず、上記の処置で思ったような動作になることを確認しました。

いずれにしても、あと一歩の対応をお願いします。

Best regards,
Buckeye@新しいマウスはやっぱり快適

[ ]
RE:05746 要望−左トリプルクリックの判定No.05792
Buckeye さん 04/07/13 08:44
 
秀丸担当さん、

追加をもう一つ。

範囲選択をされている状態で、例の「シングルクリック+ダブルクリック=トリ
プルクリック」を使ったとき、シングルクリックとダブルクリックのどっちを先
にするかで異なった動作になります。

範囲選択をした状態で、範囲選択をしている部分を「シングルクリック+ダブル
クリック=トリプルクリック」をする。
    ・シングルクリック→ダブルクリックの順番でクリックしたとき……範囲選
      択のママで特に変化が見られない(トリプルクリックに割り当てられた動
      作は行われない)。なお、ダブルクリックは標準ママで単語選択が割り当
      てられています。
    ・ダブルクリック→シングルクリックの順番でクリックしたとき……範囲選
      択を解除してトリプルクリックに割り当てられた動作をする(範囲選択な
      しでダブルクリック→シングルクリックしたときは、前のメールに書いた
      ように、ダブルクリックに割り当てられている処理をしてから、トリプル
      クリックの処理をします)

私個人としては、先日の「ダブルクリック割り当てボタン→シングルクリック割
り当てボタンの順でクリックすると、ダブルクリックに割り当てられている処理
をしてから、トリプルクリックの処理をする」という不具合が、「この順番でも
トリプルクリック割り当て処理をする」になってくれるだけで、基本的に不具合
がなくなるはずです。上記の問題が起きる状況そのものがなくなるので。ただ、
上記も、意図したように動作してくれないという問題ではあると思うので、一緒
に対処していただければ幸いです。

    実は、今回の問題、ずっと前から気づいていたんですが、どういう条件なら
    どうなるっていうのを真剣にチェックしたことがありませんでした。秀丸側
    で対処するような問題だとも思ってませんでしたし(^^;)

Best regards,
Buckeye

[ ]
RE:05792 要望−左トリプルクリックの判定No.05820
秀丸担当 さん 04/07/20 14:30
 

回答が遅れて申しわけありません。
トリプルクリックをしたとき、ダブルクリックに割り当てられたコマンドが実行
されてから、続いてトリプルクリックのコマンドが実行されるのは、不具合では
ないです。
普通に左ボタンを3回押したときも、ダブルクリックが実行されてから、トリプ
ルクリックが実行されます。
左ボタン(シングルクリック)を押しっぱなしにして、右ボタン(ダブルクリッ
クに割り当て)を押した場合、ダブルクリックが実行されないのは、逆に修正さ
せていただきます。

>範囲選択をされている状態で、例の「シングルクリック+ダブルクリック=トリ
>プルクリック」を使ったとき、シングルクリックとダブルクリックのどっちを先
>にするかで異なった動作になります。

こちらも確認することができました。
調べてみたのですが、シングル→ダブルのとき、最後の3回目のボタンダウンの
メッセージが来ていないようです。ちょっとこれに対応することは難しいです。

[ ]
RE:05820 要望−左トリプルクリックの判定No.05917
Buckeye さん 04/08/03 17:35
 
秀丸担当さん、Buckeyeです。

>左ボタン(シングルクリック)を押しっぱなしにして、右ボタン(ダブルクリッ
>クに割り当て)を押した場合、ダブルクリックが実行されないのは、逆に修正さ
>せていただきます。

あらら、そうですか……個人的には今のママのほうが都合がいいんですが、本来
の動きがそちらなら仕方ないですね。私の都合は、マクロ側で対応します。いず
れにしてもマクロ側でなんらかの対応が必要なわけですし。

Best regards,
Buckeye@夏休み明け

[ ]