マウスカーソルのあるモニタの番号を取得する

ほら、マルチモニタだったりするとuwsファイルをダブルクリックした画面と違う方にmsgboxが出てきたりするじゃない
そっちじゃねぇよってなる
だからマウスのあるモニタの番号をゲットしようっていう

msgbox( "Your mouse is on monitor: " + GetMousePointedMonitor() )

function GetMousePointedMonitor()
    result = 0
    for result = 0 to monitor() - 2
        MON_LEFT   = monitor(result, MON_X)
        MON_RIGHT  = monitor(result, MON_WIDTH) + MON_LEFT
        MON_TOP    = monitor(result, MON_Y)
        MON_BOTTOM = monitor(result, MON_HEIGHT) + MON_TOP
        isMouseOnScreen = MON_LEFT <= G_MOUSE_X
        isMouseOnScreen = (G_MOUSE_X <= MON_RIGHT)  and isMouseOnScreen
        isMouseOnScreen = (MON_TOP <= G_MOUSE_Y)    and isMouseOnScreen
        isMouseOnScreen = (G_MOUSE_Y <= MON_BOTTOM) and isMouseOnScreen
        if isMouseOnScreen then break
    next
fend

単にマウス座標がどのモニタ内にあるか一つ一つ調べるっていう
わりと力技でしたね

そんでこれ

for result = 0 to monitor() - 2

でなんで-2してるかっつうと
・モニタが1つしかなければそもそもループに入らない(※)
・ループの最後まで行ったら最後のモニタで確定なのでループ内の処理を行う必要がない
からです
forの仕様をね、うまくつかってね、かしこく書いたよ!ほめて!
みたいなあれなんですが、多分こういう書き方ってほんとは良くない

※ループに入らないとresultに値が代入されないので最初にresult=0してるのがちょっとくやしい

マウスカーソルのあるモニタの番号を取得する」への1件のフィードバック

  1. あれ、、、手元の環境では、result = 0なくても動作するみたい、、、?
    PtInRect使えば力技感が少し減るかもしれません(ほとんど詭弁)
    あと、、、「かしこく」は「トリッキーに」の間違いかなー(トリッキー、趣味なら大歓迎!)

コメントを残す