任务单 #26442

Alt-v がブロードキャスト送信されない

开放日期: 2011-10-02 12:54 最后更新: 2011-11-16 21:03

报告人:
(del#1144)
属主:
(无)
类型:
状态:
开启
组件:
里程碑:
(无)
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
文件:
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

リアルタイムモードを on にしたブロードキャスト送信で、Alt-v(貼り付け)が自プロセスにのみ送信される。

任务单历史 (3/7 Histories)

2011-10-02 12:54 Updated by: (del#1144)
  • New Ticket "Alt-v がブロードキャスト送信されない" created
2011-10-02 14:45 Updated by: (del#1144)
  • 属主 Update from (无) to yutakapon
评论

内部の動作がよく分かりませんが、条件を外から見るとショートカットキーだからだと思われます。以下のすべてが該当するものと思われます。

IDR_ACC ACCELERATORS 
BEGIN
    "T",            ID_ACC_AREYOUTHERE,     VIRTKEY, ALT, NOINVERT
    "C",            ID_ACC_COPY,            VIRTKEY, ALT, NOINVERT
    "Q",            ID_ACC_EXIT,            VIRTKEY, ALT, NOINVERT
    "N",            ID_ACC_NEWCONNECTION,   VIRTKEY, ALT, NOINVERT
    "V",            ID_ACC_PASTE,           VIRTKEY, ALT, NOINVERT
    "R",            ID_ACC_PASTECR,         VIRTKEY, ALT, NOINVERT
    "P",            ID_ACC_PRINT,           VIRTKEY, ALT, NOINVERT
    "B",            ID_ACC_SENDBREAK,       VIRTKEY, ALT, NOINVERT
    "G",            ID_FILE_CYGWINCONNECTION, VIRTKEY, ALT, NOINVERT
    "D",            ID_FILE_DUPLICATESESSION, VIRTKEY, ALT, NOINVERT
    "I",            ID_ACC_DISCONNECT,      VIRTKEY, ALT, NOINVERT
END

このキーの組み合わせは、他のウィンドウにも飛んでよいものでしょうか。分け方がこれでいいのか分かりませんが、ブロードキャスト送信されるのが「端末へのキー入力」なのか「ショートカットキーを含めた全てのキー操作」なのか、という疑問が発生します。

ID_ACC_SENDBREAK などに関しては、飛んだら困る場合もあると思われ、実際に飛んだら設定値のチェックを飛ばしてリモートに送信されそうです。

2011-10-24 00:54 Updated by: (del#24082)
评论

アクセラレータキーは WM_KEYDOWN や WM_SYSKEYDOWN ではなく、WM_COMMAND でメッセージ送信される ようです。

cf. http://eternalwindows.jp/winbase/menu/menu07.html

BroadcastEditProc()で WM_COMMAND も処理するようにすればよさそうです。 ただ、永田さんがおっしゃるような懸念事項があるので、そのまま素直にインプリしてしまってよいものかどうか。

2011-10-25 13:02 Updated by: (del#1144)
评论

選択肢としては、(1)自ウィンドウにも飛ばないようにする、(2)選択中の全ウィンドウに飛ばす、の2種類だと思います。

私の懸念事項については、受け側の VTWin でも Proc でも自分の設定値を見て通すかどうか決めるようにすればよいと思います。

私の感覚では、「端末への入力」を飛ばすものだと思っており、ブロードキャストのダイアログにいるのに VTWin に Alt-v などが飛ぶという動きを不自然に感じます。なので(1)のほうがよいと思います。

Note:現状でMetaキーはブロードキャスト送信されているようです。

2011-10-30 23:39 Updated by: (del#1144)
评论

Meta キーの設定も考慮すべきことに気付きました。今の挙動は以下の通りです。

※すべて操作は A 側

(1) A Meta=off  B Meta=off
A にのみアクセラレータキーが飛ぶ

(2) A Meta=on   B Meta=on
両方に Meta が飛ぶ

(3) A Meta=off  B Meta=on
A にのみアクセラレータキーが飛ぶ

(4) A Meta=on   B Meta=off
A に Meta が飛ぶ
B にアクセラレータキーが飛ぶ

Meta が off の場合はアクセラレータキーとして食われてしまうのでよそに飛ぶことはありませんが、Meta だった場合にはよそに飛び、それを受け取った側ではアクセラレータキーとして動作しているようです。つまり、問題があるかもしれないと述べた現象はすでに (4) のパターンで発生していそうです。

CTeraApp::PreTranslateMessage で Meta をチェックしてアクセラレータキーになるかどうか分岐してますので、このために IDD_BROADCAST_DIALOG でもアクセラレータキーが効くものと思われます。

2011-10-31 20:30 Updated by: (del#1144)
评论

(4)のパターンは、メッセージ受け取り時に設定値をCVTWindow::OnCommandでチェックしているので問題ないようです。

2011-11-16 21:03 Updated by: (del#1144)

Attachment File List

No attachments

编辑

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登录名