public Stroke Read() { MOUSE_INPUT_DATA outBuffer = new MOUSE_INPUT_DATA(); uint bytesReturned = 0; uint outBufferSize = (uint)Marshal.SizeOf(typeof(MOUSE_INPUT_DATA)); RawRead(base.device, 0x222100, IntPtr.Zero, 0, out outBuffer, outBufferSize, out bytesReturned, IntPtr.Zero); if (bytesReturned > 0) { Stroke stroke = new Stroke(); stroke.flags = (Flags)outBuffer.Flags; stroke.state = (States)outBuffer.ButtonFlags; stroke.rolling = outBuffer.ButtonData; stroke.x = outBuffer.LastX; stroke.y = outBuffer.LastY; stroke.information = outBuffer.ExtraInformation; return stroke; } return null; }
public uint Read(Stroke[] strokes, int number) { if ((number == 0) || (strokes.Length < number)) { return 0; } MOUSE_INPUT_DATA[] outBuffer = new MOUSE_INPUT_DATA[number]; uint bytesReturned = 0; uint num2 = (uint)Marshal.SizeOf(typeof(MOUSE_INPUT_DATA)); RawRead(base.device, 0x222100, IntPtr.Zero, 0, outBuffer, (uint)(number * num2), out bytesReturned, IntPtr.Zero); bytesReturned /= num2; for (int i = 0; i < bytesReturned; i++) { strokes[i].flags = (Flags)outBuffer[i].Flags; strokes[i].state = (States)outBuffer[i].ButtonFlags; strokes[i].rolling = outBuffer[i].ButtonData; strokes[i].x = outBuffer[i].LastX; strokes[i].y = outBuffer[i].LastY; strokes[i].information = outBuffer[i].ExtraInformation; } return bytesReturned; }
public uint Write(Stroke[] strokes, int number) { if ((number == 0) || (strokes.Length < number)) { return 0; } MOUSE_INPUT_DATA[] inBuffer = new MOUSE_INPUT_DATA[number]; uint bytesReturned = 0; uint num2 = (uint)Marshal.SizeOf(typeof(MOUSE_INPUT_DATA)); for (int i = 0; i < number; i++) { inBuffer[i].UnitId = 0; inBuffer[i].Flags = (ushort)strokes[i].flags; inBuffer[i].ButtonFlags = (ushort)strokes[i].state; inBuffer[i].ButtonData = strokes[i].rolling; inBuffer[i].RawButtons = 0; inBuffer[i].LastX = strokes[i].x; inBuffer[i].LastY = strokes[i].y; inBuffer[i].ExtraInformation = strokes[i].information; } RawWrite(base.device, 0x222080, inBuffer, (uint)(number * num2), IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero); return (bytesReturned / num2); }
private static extern bool RawWrite(SafeFileHandle Device, uint IoControlCode, ref MOUSE_INPUT_DATA InBuffer, uint InBufferSize, IntPtr OutBuffer, uint OutBufferSize, out uint BytesReturned, IntPtr Overlapped);
public bool Write(Stroke stroke) { MOUSE_INPUT_DATA inBuffer = new MOUSE_INPUT_DATA(); uint bytesReturned = 0; uint inBufferSize = (uint)Marshal.SizeOf(typeof(MOUSE_INPUT_DATA)); inBuffer.UnitId = 0; inBuffer.Flags = (ushort)stroke.flags; inBuffer.ButtonFlags = (ushort)stroke.state; inBuffer.ButtonData = stroke.rolling; inBuffer.RawButtons = 0; inBuffer.LastX = stroke.x; inBuffer.LastY = stroke.y; inBuffer.ExtraInformation = stroke.information; RawWrite(base.device, 0x222080, ref inBuffer, inBufferSize, IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero); return (bytesReturned > 0); }