MOUSEINPUT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dx | INT | 4 | +0 | +0 | マウスの絶対位置、または前回のマウスイベントが生成されてからの移動量です。どちらになるかは dwFlags メンバーの値によって決まります。絶対データはマウスの x 座標として指定し、相対データは移動したピクセル数として指定します。 | ||||||||||||||||||||||||||||||
| dy | INT | 4 | +4 | +4 | マウスの絶対位置、または前回のマウスイベントが生成されてからの移動量です。どちらになるかは dwFlags メンバーの値によって決まります。絶対データはマウスの y 座標として指定し、相対データは移動したピクセル数として指定します。 | ||||||||||||||||||||||||||||||
| mouseData | DWORD | 4 | +8 | +8 | dwFlags に MOUSEEVENTF_WHEEL が含まれる場合、mouseData はホイールの移動量を指定します。正の値はホイールが前方(ユーザーから離れる方向)に回転したことを示し、負の値はホイールが後方(ユーザーに向かう方向)に回転したことを示します。ホイールの 1 クリックは WHEEL_DELTA(値は 120)として定義されています。 Windows Vista: dwFlags に MOUSEEVENTF_HWHEEL が含まれる場合、dwData はホイールの移動量を指定します。正の値はホイールが右に回転したことを示し、負の値はホイールが左に回転したことを示します。ホイールの 1 クリックは WHEEL_DELTA(値は 120)として定義されています。 dwFlags に MOUSEEVENTF_WHEEL、MOUSEEVENTF_XDOWN、MOUSEEVENTF_XUP のいずれも含まれない場合、mouseData は 0 でなければなりません。 dwFlags に MOUSEEVENTF_XDOWN または MOUSEEVENTF_XUP が含まれる場合、mouseData はどの X ボタンが押された、または離されたかを指定します。この値には次のフラグの任意の組み合わせを指定できます。
| ||||||||||||||||||||||||||||||
| dwFlags | MOUSE_EVENT_FLAGS | 4 | +12 | +12 | マウスの移動やボタンのクリックに関するさまざまな側面を指定するビットフラグのセットです。このメンバーのビットには、次の値の妥当な組み合わせを指定できます。 マウスボタンの状態を指定するビットフラグは、継続中の状態ではなく状態の変化を示すために設定されます。たとえば、マウスの左ボタンが押されたまま保持されている場合、MOUSEEVENTF_LEFTDOWN は左ボタンが最初に押されたときに設定されますが、それ以降の動作では設定されません。同様に、MOUSEEVENTF_LEFTUP はボタンが最初に離されたときにのみ設定されます。 MOUSEEVENTF_WHEEL フラグと、MOUSEEVENTF_XDOWN または MOUSEEVENTF_XUP フラグを、dwFlags パラメーターに同時に指定することはできません。どちらも mouseData フィールドを使用する必要があるためです。
| ||||||||||||||||||||||||||||||
| time | DWORD | 4 | +16 | +16 | イベントのタイムスタンプ(ミリ秒単位)です。このパラメーターが 0 の場合、システムが独自のタイムスタンプを提供します。 | ||||||||||||||||||||||||||||||
| dwExtraInfo | UINT_PTR | 8/4 | +24 | +20 | マウスイベントに関連付けられた追加の値です。アプリケーションは GetMessageExtraInfo を呼び出して、この追加情報を取得します。 |
公式ドキュメント
シミュレートされたマウスイベントに関する情報を格納します。
解説(Remarks)
MOUSEEVENTF_MOVE で示されるようにマウスが移動した場合、dx と dy はその移動に関する情報を指定します。この情報は絶対値または相対値の整数として指定します。
MOUSEEVENTF_ABSOLUTE の値が指定されている場合、dx と dy には 0 から 65,535 の間で正規化された絶対座標が格納されます。イベントプロシージャはこれらの座標を表示面にマップします。座標 (0,0) は表示面の左上隅に、座標 (65535,65535) は右下隅にマップされます。マルチモニター環境では、座標はプライマリモニターにマップされます。
MOUSEEVENTF_VIRTUALDESK が指定されている場合、座標は仮想デスクトップ全体にマップされます。
MOUSEEVENTF_ABSOLUTE の値が指定されていない場合、dx と dy は直前のマウスイベント(最後に報告された位置)からの相対的な移動を指定します。正の値はマウスが右(または下)に移動したことを意味し、負の値はマウスが左(または上)に移動したことを意味します。
相対的なマウスの移動は、マウスの速度と 2 つのマウスしきい値の影響を受けます。ユーザーはこれら 3 つの値を、コントロールパネルの マウスのプロパティ シートにある ポインターの速度 スライダーで設定します。これらの値は SystemParametersInfo 関数を使用して取得および設定できます。
システムは、指定された相対的なマウスの移動に対して 2 つのテストを適用します。x 軸または y 軸のいずれかに沿って指定された距離が 1 番目のマウスしきい値より大きく、かつマウスの速度が 0 でない場合、システムはその距離を 2 倍にします。x 軸または y 軸のいずれかに沿って指定された距離が 2 番目のマウスしきい値より大きく、かつマウスの速度が 2 に等しい場合、システムは 1 番目のしきい値テストを適用した結果の距離をさらに 2 倍にします。したがって、指定された x 軸または y 軸に沿った相対的なマウスの移動が、システムによって最大 4 倍にされる可能性があります。
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 Structureimport 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: uintstruct 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