ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

InjectTouchInput を見てみる

やっと本題の InjectTouchInput に入ります。

MSDNのInjectTouchInputを訳してみます。こちらも間違いがあれば指摘していただけると助かります。

なお、この関数もWindows 8 および Windows Server 2012 のデスクトップのみのサポートになっています。

InjectTouchInput 関数

BOOL InjectTouchInput(

UINT32 count,

const POINTER_TOUCH_INFO *contacts

);

count

次の引数contactsの数。最大数はInitializeTouchInjection 関数で設定したmaxCount の数。

contacts 

POINTER_TOUCH_INFO 構造体の配列へのポインタ。認識させるタッチポイントの数だけ作成する

POINTER_TOUCH_INFO 構造体

typedef struct tagPOINTER_TOUCH_INFO {

POINTER_INFO pointerInfo;

Touch Flags  touchFlags;

Touch Mask   touchMask;

RECT         rcContact;

RECT         rcContactRaw;

UINT32       orientation;

UINT32       pressure;

} POINTER_TOUCH_INFO;

pointerInfo
タッチの情報が入った POINTER_INFO 構造体。 

touchFlags
未使用。 

touchMask
TOUCH_MASK_NONEまたは、TOUCH_MASK_CONTACTAREA、TOUCH_MASK_ORIENTATION、TOUCH_MASK_PRESSUREを OR して設定する。それぞれのメンバ変数を有効にする。 

rcContact
rcContactRaw
まだ、よくわからないのですが、タッチされた時の範囲のようです(おそらくタッチは1ピクセルにはならないので)。 

orientation
ポインタの回転角度。 0 から 359 の範囲で設定する。0が設定された場合は、回転をレポートしない。 

pressure
筆圧。 0 から 1024 の範囲で設定する。 0 が設定された場合は、筆圧をレポートしない。 

POINTER_INFO 構造体

typedef struct tagPOINTER_INFO {

POINTER_INPUT_TYPE         pointerType;

UINT32                     pointerId;

UINT32                     frameId;

POINTER_FLAGS              pointerFlags;

HANDLE                     sourceDevice;

HWND                       hwndTarget;

POINT                      ptPixelLocation;

POINT                      ptHimetricLocation;

POINT                      ptPixelLocationRaw;

POINT                      ptHimetricLocationRaw;

DWORD                      dwTime;

UINT32                     historyCount;

INT32                      inputData;

DWORD                      dwKeyStates;

UINT64                     PerformanceCount;

POINTER_BUTTON_CHANGE_TYPE ButtonChangeType;

} POINTER_INFO;

pointerType
POINTER_INPUT_TYPE 列挙体で定義されている、ポインタ種別。ポインタ、ペン、タッチ、マウスがある。
pointerId
複数のポインタを扱う場合のポインタ識別子。 

frameId
一回の更新で複数の情報を取得するようなデバイスの場合の、フレーム番号 

pointerFlags
シミュレートする入力の種類。Pointer Flagsを参照。いつ、どのように入力させるかは下図を参照。
 

sourceDevice
入力元デバイスのハンドル。 

hwndTarget
ターゲットウィンドウのウィンドウハンドル。 

ptPixelLocation
ポイントの座標(ピクセル単位)。PT_TOUCH のみ適用され、そのほかはptPixelLocationRawと同じになります。 

ptHimetricLocation
HIMETRIC(0.01mm)単位でのスクリーン座標。PT_TOUCH のみ適用され、そのほかはptPixelLocationRawと同じになります。 

ptPixelLocationRaw
ポイントのスクリーン座標(ピクセル単位)。 

ptHimetricLocationRaw
HIMETRIC(0.01mm)単位でのスクリーン座標。 

dwTime
タイムスタンプ。 

historyCount
この回で合成された入力の数? 

inputData
pointerFlags に POINTER_FLAG_WHEEL を指定した場合、正の値はホイールを前方に回転したことを示し、負の値はホイールが逆回転したことを示します。 

pointerFlags に POINTER_FLAG_HWHEEL を指定した場合、正の値はホイールが右に回転したことを示し、負の値はホイールが左に回転したことを示します。

dwKeyStates
0または次の値で、ShiftまたはCtrlキーの押下状態を通知します。 

      POINTER_MOD_SHIFT Shiftキーが押された。

    POINTER_MOD_CTRL Ctrlキーが押された。

PerformanceCount
パフォーマンスカウンタの値。 

ButtonChangeType
(おそらく)マウスボタンの押下状態。