最近闲着无聊,想实现一下后台监控鼠标,msdn中查了raw input之后,遇到一个问题:msdn中RAWMOUSE结构定义如下:
//------------------------RAWMOUSE------------------------
typedef struct tagRAWMOUSE { 
USHORT usFlags; 
//----问题----
union {
ULONG ulButtons;
struct {
USHORT usButtonFlags;
USHORT usButtonData;
};
};
//----问题----
ULONG ulRawButtons;
LONG lLastX;
LONG lLastY;
ULONG ulExtraInformation;
} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
//------------------------RAWMOUSE------------------------问题:这个结构中有一个union,不知道这个东西在c#中应如何处理?怎样把RAWMOUSE修改成c#版本的?

解决方案 »

  1.   

        
        [StructLayoutAttribute(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 1)]
        struct RawMouse
        {
            [FieldOffset(0)]
            ushort usFlags;
            //因为要进行内存对齐,在C/C++中,usFlags占4个字节
            [FieldOffset(4)]
            uint   ulButtons;
            [FieldOffset(4)]
            ushort usButtonFlags;
            [FieldOffset(6)]
            ushort usButtonData;
            [FieldOffset(8)]
            uint ulRawButtons;
            [FieldOffset(12)]
            int lLastX;
            [FieldOffset(16)]
            int lLastY;
            [FieldOffset(20)]
            uint ulExtraInformation;
        };