hsptvブラウザですら配慮してくれていない ……
// マウスの役割が反転しているかどうか #module #uselib "user32.dll" #func SwapMouseButton "SwapMouseButton" int // マウスの役割が反転しているかどうか (交換されていたら真) #defcfunc IsMouseButtonSwapped // 反転する。もとから反転されていたら真を返す。 SwapMouseButton 1 : bSwappedMouse = ( stat != 0 ) SwapMouseButton bSwappedMouse // 元の状態に戻す return bSwappedMouse #global // サンプル #if 1 #define ctype WHICH_INT(%1,%2,%3) ( ((%1) != 0) * (%2) | ((%1) == 0) * (%3) ) // ↑条件演算子 ( %1 ? %2 : %3 ) int 専用 // 反転したクリックを正確に感知する screen 0, 240, 180 bSwappedMouseBtn = IsMouseButtonSwapped() *mainlp redraw 2 color 255, 255, 255 : boxf : color pos 20, 20 // getkey するバージョン mes "getkey" getkey bLDown, 1 + bSwappedMouseBtn : mes "左ボタン:"+ bLDown // 左 getkey bRDown, 2 - bSwappedMouseBtn : mes "右ボタン:"+ bRDown // 右 mes // stick を使うバージョン mes "stick" stick key, WHICH_INT( bSwappedMouseBtn, 512, 256 ) // 左クリックを非トリガーにする mes "左ボタン:"+ ( key & WHICH_INT( bSwappedMouseBtn, 512, 256 ) ) mes "右ボタン:"+ ( key & WHICH_INT( bSwappedMouseBtn, 256, 512 ) ) redraw await 20 goto *mainlp #endif
WHICH_INT(a, b, c) は、
a が0以外のとき b を、0の時は c を返すマクロです。
マウス機能が反転されていたら bSwappedMouseBtn が0以外なので、
(bSwappedMouseBtn, 512, 256) は 512 になります。