Win32 API 日本語リファレンス
ホームUI.Input.KeyboardAndMouse › MOUSEINPUT

MOUSEINPUT

構造体
サイズx64: 32 バイト / x86: 24 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dxINT4+0+0マウスの絶対位置、または前回のマウスイベントが生成されてからの移動量です。どちらになるかは dwFlags メンバーの値によって決まります。絶対データはマウスの x 座標として指定し、相対データは移動したピクセル数として指定します。
dyINT4+4+4マウスの絶対位置、または前回のマウスイベントが生成されてからの移動量です。どちらになるかは dwFlags メンバーの値によって決まります。絶対データはマウスの y 座標として指定し、相対データは移動したピクセル数として指定します。
mouseDataDWORD4+8+8

dwFlagsMOUSEEVENTF_WHEEL が含まれる場合、mouseData はホイールの移動量を指定します。正の値はホイールが前方(ユーザーから離れる方向)に回転したことを示し、負の値はホイールが後方(ユーザーに向かう方向)に回転したことを示します。ホイールの 1 クリックは WHEEL_DELTA(値は 120)として定義されています。

Windows Vista: dwFlagsMOUSEEVENTF_HWHEEL が含まれる場合、dwData はホイールの移動量を指定します。正の値はホイールが右に回転したことを示し、負の値はホイールが左に回転したことを示します。ホイールの 1 クリックは WHEEL_DELTA(値は 120)として定義されています。

dwFlagsMOUSEEVENTF_WHEELMOUSEEVENTF_XDOWNMOUSEEVENTF_XUP のいずれも含まれない場合、mouseData は 0 でなければなりません。

dwFlagsMOUSEEVENTF_XDOWN または MOUSEEVENTF_XUP が含まれる場合、mouseData はどの X ボタンが押された、または離されたかを指定します。この値には次のフラグの任意の組み合わせを指定できます。

意味
XBUTTON1
0x0001
1 番目の X ボタンが押された、または離された場合に設定されます。
XBUTTON2
0x0002
2 番目の X ボタンが押された、または離された場合に設定されます。
dwFlagsMOUSE_EVENT_FLAGS4+12+12

マウスの移動やボタンのクリックに関するさまざまな側面を指定するビットフラグのセットです。このメンバーのビットには、次の値の妥当な組み合わせを指定できます。

マウスボタンの状態を指定するビットフラグは、継続中の状態ではなく状態の変化を示すために設定されます。たとえば、マウスの左ボタンが押されたまま保持されている場合、MOUSEEVENTF_LEFTDOWN は左ボタンが最初に押されたときに設定されますが、それ以降の動作では設定されません。同様に、MOUSEEVENTF_LEFTUP はボタンが最初に離されたときにのみ設定されます。

MOUSEEVENTF_WHEEL フラグと、MOUSEEVENTF_XDOWN または MOUSEEVENTF_XUP フラグを、dwFlags パラメーターに同時に指定することはできません。どちらも mouseData フィールドを使用する必要があるためです。

意味
MOUSEEVENTF_MOVE
0x0001
移動が発生しました。
MOUSEEVENTF_LEFTDOWN
0x0002
左ボタンが押されました。
MOUSEEVENTF_LEFTUP
0x0004
左ボタンが離されました。
MOUSEEVENTF_RIGHTDOWN
0x0008
右ボタンが押されました。
MOUSEEVENTF_RIGHTUP
0x0010
右ボタンが離されました。
MOUSEEVENTF_MIDDLEDOWN
0x0020
中央ボタンが押されました。
MOUSEEVENTF_MIDDLEUP
0x0040
中央ボタンが離されました。
MOUSEEVENTF_XDOWN
0x0080
X ボタンが押されました。
MOUSEEVENTF_XUP
0x0100
X ボタンが離されました。
MOUSEEVENTF_WHEEL
0x0800
マウスにホイールがある場合、ホイールが移動しました。移動量は mouseData で指定します。
MOUSEEVENTF_HWHEEL
0x1000
マウスにホイールがある場合、ホイールが水平方向に移動しました。移動量は mouseData で指定します。
Windows XP/2000: この値はサポートされていません。
MOUSEEVENTF_MOVE_NOCOALESCE
0x2000
WM_MOUSEMOVE メッセージは結合されません。既定の動作では WM_MOUSEMOVE メッセージが結合されます。
Windows XP/2000: この値はサポートされていません。
MOUSEEVENTF_VIRTUALDESK
0x4000
座標をデスクトップ全体にマップします。MOUSEEVENTF_ABSOLUTE と共に使用しなければなりません。
MOUSEEVENTF_ABSOLUTE
0x8000
dx メンバーと dy メンバーには、正規化された絶対座標が格納されます。このフラグが設定されていない場合、dxdy には相対データ(最後に報告された位置からの変化量)が格納されます。このフラグは、システムに接続されているマウスやその他のポインティングデバイスの種類にかかわらず、設定することも設定しないこともできます。相対的なマウスの移動の詳細については、後述の「解説」セクションを参照してください。
timeDWORD4+16+16イベントのタイムスタンプ(ミリ秒単位)です。このパラメーターが 0 の場合、システムが独自のタイムスタンプを提供します。
dwExtraInfoUINT_PTR8/4+24+20マウスイベントに関連付けられた追加の値です。アプリケーションは GetMessageExtraInfo を呼び出して、この追加情報を取得します。

公式ドキュメント

シミュレートされたマウスイベントに関する情報を格納します。

解説(Remarks)

MOUSEEVENTF_MOVE で示されるようにマウスが移動した場合、dxdy はその移動に関する情報を指定します。この情報は絶対値または相対値の整数として指定します。

MOUSEEVENTF_ABSOLUTE の値が指定されている場合、dxdy には 0 から 65,535 の間で正規化された絶対座標が格納されます。イベントプロシージャはこれらの座標を表示面にマップします。座標 (0,0) は表示面の左上隅に、座標 (65535,65535) は右下隅にマップされます。マルチモニター環境では、座標はプライマリモニターにマップされます。

MOUSEEVENTF_VIRTUALDESK が指定されている場合、座標は仮想デスクトップ全体にマップされます。

MOUSEEVENTF_ABSOLUTE の値が指定されていない場合、dxdy は直前のマウスイベント(最後に報告された位置)からの相対的な移動を指定します。正の値はマウスが右(または下)に移動したことを意味し、負の値はマウスが左(または上)に移動したことを意味します。

相対的なマウスの移動は、マウスの速度と 2 つのマウスしきい値の影響を受けます。ユーザーはこれら 3 つの値を、コントロールパネルの マウスのプロパティ シートにある ポインターの速度 スライダーで設定します。これらの値は SystemParametersInfo 関数を使用して取得および設定できます。

システムは、指定された相対的なマウスの移動に対して 2 つのテストを適用します。x 軸または y 軸のいずれかに沿って指定された距離が 1 番目のマウスしきい値より大きく、かつマウスの速度が 0 でない場合、システムはその距離を 2 倍にします。x 軸または y 軸のいずれかに沿って指定された距離が 2 番目のマウスしきい値より大きく、かつマウスの速度が 2 に等しい場合、システムは 1 番目のしきい値テストを適用した結果の距離をさらに 2 倍にします。したがって、指定された x 軸または y 軸に沿った相対的なマウスの移動が、システムによって最大 4 倍にされる可能性があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// MOUSEINPUT  (x64 32 / x86 24 バイト)
typedef struct MOUSEINPUT {
    INT dx;
    INT dy;
    DWORD mouseData;
    MOUSE_EVENT_FLAGS dwFlags;
    DWORD time;
    UINT_PTR dwExtraInfo;
} MOUSEINPUT;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MOUSEINPUT
{
    public int dx;
    public int dy;
    public uint mouseData;
    public uint dwFlags;
    public uint time;
    public UIntPtr dwExtraInfo;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MOUSEINPUT
    Public dx As Integer
    Public dy As Integer
    Public mouseData As UInteger
    Public dwFlags As UInteger
    Public time As UInteger
    Public dwExtraInfo As UIntPtr
End Structure
import ctypes
from ctypes import wintypes

class MOUSEINPUT(ctypes.Structure):
    _fields_ = [
        ("dx", ctypes.c_int),
        ("dy", ctypes.c_int),
        ("mouseData", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("time", wintypes.DWORD),
        ("dwExtraInfo", ctypes.c_size_t),
    ]
#[repr(C)]
pub struct MOUSEINPUT {
    pub dx: i32,
    pub dy: i32,
    pub mouseData: u32,
    pub dwFlags: u32,
    pub time: u32,
    pub dwExtraInfo: usize,
}
import "golang.org/x/sys/windows"

type MOUSEINPUT struct {
	dx int32
	dy int32
	mouseData uint32
	dwFlags uint32
	time uint32
	dwExtraInfo uintptr
}
type
  MOUSEINPUT = record
    dx: Integer;
    dy: Integer;
    mouseData: DWORD;
    dwFlags: DWORD;
    time: DWORD;
    dwExtraInfo: NativeUInt;
  end;
const MOUSEINPUT = extern struct {
    dx: i32,
    dy: i32,
    mouseData: u32,
    dwFlags: u32,
    time: u32,
    dwExtraInfo: usize,
};
type
  MOUSEINPUT {.bycopy.} = object
    dx: int32
    dy: int32
    mouseData: uint32
    dwFlags: uint32
    time: uint32
    dwExtraInfo: uint
struct MOUSEINPUT
{
    int dx;
    int dy;
    uint mouseData;
    uint dwFlags;
    uint time;
    size_t dwExtraInfo;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MOUSEINPUT サイズ: 24 バイト(x86)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; dx : INT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dy : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; mouseData : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwFlags : MOUSE_EVENT_FLAGS (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; time : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwExtraInfo : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MOUSEINPUT サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; dx : INT (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dy : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; mouseData : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwFlags : MOUSE_EVENT_FLAGS (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; time : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwExtraInfo : UINT_PTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MOUSEINPUT
    #field int dx
    #field int dy
    #field int mouseData
    #field int dwFlags
    #field int time
    #field intptr dwExtraInfo
#endstruct

stdim st, MOUSEINPUT        ; NSTRUCT 変数を確保
st->dx = 100
mes "dx=" + st->dx