public static void SendKeyUp(ushort k)
        {
            INPUT[] InputData = new INPUT[1];

            InputData[0].Type = 1; //INPUT_KEYBOARD
            InputData[0].Scan = (ushort)k;
            InputData[0].Flags = (uint)(SendInputFlags.KEYEVENTF_SCANCODE | SendInputFlags.KEYEVENTF_KEYUP);
            InputData[0].Time = 0;
            InputData[0].ExtraInfo = UIntPtr.Zero;

            // send keydown
            SendInput(1, InputData, Marshal.SizeOf(typeof(INPUT)));
        }
		protected override INPUT[] ToDirectInput()
		{
			var input = new INPUT()
			{
				Type = 0,
				Mouse = new MOUSEINPUT()
				{
					Time = 0,
					Data = 0,
					DX = 0,
					DY = 0,
					ExtraInfo = UIntPtr.Zero,
					Flags = 0
				}
			};

			switch (Button)
			{
				case System.Windows.Forms.MouseButtons.Left:
					input.Mouse.Flags = 0x2;
					break;
				case System.Windows.Forms.MouseButtons.Right:
					input.Mouse.Flags = 0x8;
					break;
				case System.Windows.Forms.MouseButtons.Middle:
					input.Mouse.Flags = 0x20;
					break;
				case System.Windows.Forms.MouseButtons.XButton1:
					input.Mouse.Flags = 0x80;
					input.Mouse.Data = 0x1;
					break;

				case System.Windows.Forms.MouseButtons.XButton2:
					input.Mouse.Flags = 0x80;
					input.Mouse.Data = 0x2;
					break;
			}

			return new[] { input };
		}