oncmdだとこんな感じでしょうか。
// メッセージ
#define WM_XBUTTONDOWN 0x020B // Xボタン押し下げ
#define WM_XBUTTONUP 0x020C // Xボタン押し上げ
// wParam下位
#define MK_LBUTTON 0x0001 // マウス左ボタン
#define MK_RBUTTON 0x0002 // マウス右ボタン
#define MK_SHIFT 0x0004 // Shift
#define MK_CONTROL 0x0008 // Ctrl
#define MK_MBUTTON 0x0010 // マウス中央ボタン
#define MK_XBUTTON1 0x0020 // Xボタン1
#define MK_XBUTTON2 0x0040 // Xボタン2
// wParam上位
#define XBUTTON1 0x0001 // Xボタン1
#define XBUTTON2 0x0002 // Xボタン2
oncmd goto *X_Key_Down, WM_XBUTTONDOWN;
oncmd goto *X_Key_Up, WM_XBUTTONUP;
stop;
*X_Key_Down
Xflag = 0;
gosub *X_Button;
stop;
*X_Key_Up
Xflag = 1;
gosub *X_Button;
stop;
*X_Button
wParamLow = wParam & 0xFFFF; // 同時に押されているキー
wParamHigh = (wParam >> 16) & 0xFFFF; // 変化のあったXボタン
lParamLow = lParam & 0xFFFF; // X座標
lParamHigh = (lParam >> 16) & 0xFFFF; // Y座標
if( Xflag == 0 ) {
state = "押されました";
}
else: if( Xflag == 1 ) {
state = "放されました";
}
buf = "";
if( wParamHigh == XBUTTON1 ) {
buf = "マウスX1ボタンが"+state+"\n";
}
else: if( wParamHigh == XBUTTON2 ) {
buf = "マウスX2ボタンが"+state+"\n";
}
buf += "座標: "+lParamLow+", "+lParamHigh+"\n";
buf += "同時に押されているキー:\n";
if( wParamLow & MK_LBUTTON ) {
buf += "マウス左ボタン\n";
}
if( wParamLow & MK_RBUTTON ) {
buf += "マウス右ボタン\n";
}
if( wParamLow & MK_SHIFT ) {
buf += "Shiftキー\n";
}
if( wParamLow & MK_CONTROL ) {
buf += "Ctrlキー\n";
}
if( wParamLow & MK_MBUTTON ) {
buf += "マウス中央ボタン\n";
}
if( wParamLow & MK_XBUTTON1 ) {
buf += "マウスX1ボタン\n";
}
if( wParamLow & MK_XBUTTON2 ) {
buf += "マウスX2ボタン";
}
// 描画
redraw 0;
color 255, 255, 255: boxf;
color 0, 0, 0: pos 0, 0;
mes buf;
redraw 1;
return;