在您将此标记为this帖子的副本之前,请知道我要求的问题比该问题的答案更清晰,更具体。
具体来说,我想知道如何在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将成为一个int,告诉我在lParam中找到多少个多点触控点。 lParam本身“包含一个触摸输入句柄,可用于调用GetTouchInputInfo,以根据msdn页面检索有关与此消息”相关联的触摸点的详细信息。 GetTouchInputInfo函数返回TOUCHINPUT结构。
我的问题是如何在C#中构建TOUCHINPUT结构(因为文档是在C ++中)以及如何通过SendMessage()函数传递该信息,以便我可以将kinect视为一般的多点触控任何多点触控应用中的设备。
答案 0 :(得分:1)
您需要在C#代码中表示C ++结构 一旦有了C#结构,就可以将它用作输入或输出参数 我发现转换这些结构的最佳方法是使用P / Invoke Interop助手: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;
}