Index: [Article Count Order] [Thread]

Date:  Mon, 27 Mar 2000 01:24:23 +0900
From:  HANAWA Yoshio <hanawa@is.s.u-tokyo.ac.jp>
Subject:  [mayu-ml:00016] &PostMessage の利用について
To:  mayu-ml@yl.is.s.u-tokyo.ac.jp
Cc:  HANAWA Yoshio <hanawa@is.s.u-tokyo.ac.jp>
Message-Id:  <200003261617.BAA26602@tjms1f.is.s.u-tokyo.ac.jp>
X-Mail-Count: 00016

はなわともうします。

あやしい実験の成果について報告します。
NTのコンソールの動きをktermっぽくしよう、という試みです。
Windows2000でしか確認していませんが、
なかなかいい感じで使えています。

window  ConsoleWindowClass /^ConsoleWindowClass$/ : Global
key	S-Prior	=> &PostMessage(ToItself, 277, 2, 0)
key	S-Next	=> &PostMessage(ToItself, 277, 3, 0)
key	S-Insert	=> &PostMessage(ToItself, 273, 65521, 0)

解説しますと、magic numberの意味は、それぞれ

WM_VSCROLL 277
SB_PAGEUP    2
SB_PAGEDOWN  3
WM_COMMAND 273
NTコンソールでの貼り付け 65521

です。NTコンソールのタイトルバーの右クリックメニューのメニューIDは
次のようなプログラムでブルートフォースで調べました。
(多くのアプリケーションではspy++で調べられますが、
  こいつはうまくいかないようです。
  こんなことをしないでも調べられるという方がいらっしゃいましたら、
  後学のために教えて下さればうれしいです)

#include <windows.h>

int main(void)
{
    int i;
    HWND hwnd;
    hwnd = (HWND)0x7b029e;
    for (i = 65000; i < 66000; i++) {
        PostMessage(hwnd, WM_COMMAND, i, 0);
    }
    return 0;
}

この成果として、それぞれのメニューIDが
  65520 コピー
  65521 貼り付け
  65522 範囲指定
  65523 スクロール
  65524 検索
  65525 全て選択
であるとわかりました。

このように、&PostMessageで直接あれこれすると怪しいことができます。
が、WM_COMMANDを送りつけるのは、違うバージョンだと動かないことも
ありうるので、あまりよくないかもしれません。
不安な場合は
key	S-Insert	=> A-Space E P
としてもいいですが、一瞬メニューが見えて格好悪いです。

では、眠いのでこのへんで。

  ----  ----  ----  ----  ----  ----  ----  ----
|    はなわ  よしお (HANAWA Yoshio)
|    mailto: hanawa@is.s.u-tokyo.ac.jp