2

これをこの投稿の複製としてマークする前に、その質問への回答が提供するよりも明確で具体的なものを求めていることを知っておいてください。

具体的には、C#でWM_TOUCHメッセージを作成して送信する方法を知りたいです。

そのドキュメント(上記のリンク)には、その構成と送信される情報の収集方法が記載されていますが、実際にWM_TOUCHメッセージを作成する方法については何も記載されておらず、C#について十分な知識がありません。見つけることができました。

私はそれがこのように見えるべきであることを知っています:

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMSg, IntPtr wParam, IntPtr lParam);

/* code to make wParam and lParam */

SendMessage(HWND_BROADCAST, WM_TOUCH, _wParam, _lParam);

wParamは、lParam内で見つかったマルチタッチポイントの数を示すintになります。msdnページによると、lParam自体に「 GetTouchInputInfoの呼び出しで使用できるタッチ入力ハンドルが含まれており、このメッセージに関連付けられているタッチポイントに関する詳細情報を取得できます」。GetTouchInputInfo関数は、TOUCHINPUT構造体を返します。

私の質問は、C#でTOUCHINPUT構造体を構築する方法(ドキュメントはC ++であるため)と、その情報をSendMessage()関数を介して渡す方法です。これにより、kinectを任意のマルチタッチデバイスで一般的なマルチタッチデバイスとして扱うことができます。タッチアプリケーション。

4

1 に答える 1

1

C ++構造をC#コードで表す必要があります。
C#構造体を取得したら、それを入力または出力パラメーターとして使用できます。
これらの構造を変換するために私が見つけた最良の方法は、P / Invoke Interop Assistant(http://clrinterop.codeplex.com/releases/view/14120 )を使用することです。

投稿したリンクからTOUCHINPUT構造をコピーすると、次の出力が得られます。

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct TOUCHINPUT {
    /// LONG->int
    public int x;
    /// LONG->int
    public int y;
    /// HANDLE->void*
    public System.IntPtr hSource;
    /// DWORD->unsigned int
    public uint dwID;
    /// DWORD->unsigned int
    public uint dwFlags;
    /// DWORD->unsigned int
    public uint dwMask;
    /// DWORD->unsigned int
    public uint dwTime;
    /// ULONG_PTR->unsigned int
    public uint dwExtraInfo;
    /// DWORD->unsigned int
    public uint cxContact;
    /// DWORD->unsigned int
    public uint cyContact;
}
于 2012-08-27T08:25:00.373 に答える