『急』C# 有关鼠标转化问题(左右键切换问题)

yong2007123 2008-12-15 11:08:02
请问一下:
本人在做一个小项目:现有一支蓝牙笔(笔上有一个按键)以及一个显示屏。
功能是:使蓝牙笔能当左右鼠标使用。

现遇到一个问题,现通过按键能单独实现左,右键;但当右键按下后,一直为右键菜单,不能响应左键事件。
代码如下:

//for firing mouse and keyboard events
[DllImport("user32.dll", SetLastError = true)]
static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

/declare consts for mouse messages
public const int INPUT_MOUSE = 0;
public const int INPUT_KEYBOARD = 1;
public const int INPUT_HARDWARE = 2;

public const int MOUSEEVENTF_MOVE = 0x01;
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;
public const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
public const int MOUSEEVENTF_MIDDLEUP = 0x40;
public const int MOUSEEVENTF_ABSOLUTE = 0x8000;

[StructLayout(LayoutKind.Explicit, Size = 28)]
public struct INPUT
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)] //*
public MOUSEINPUT mi;
[FieldOffset(4)] //*
public KEYBDINPUT ki;
[FieldOffset(4)] //*
public HARDWAREINPUT hi;
}
//imports mouse_event function from user32.dll

[DllImport("user32.dll")]
private static extern void mouse_event(
long dwFlags, // motion and click options
long dx, // horizontal position or change
long dy, // vertical position or change
long dwData, // wheel movement
long dwExtraInfo // application-defined information
);

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetCursorPos(int X, int Y);


void OnTimedEvent(object source, WiimoteChangedEventArgs args)
{
mut2.WaitOne();

aTimer.Start(); // 开始计时
WiimoteState ws = args.WiimoteState;

if (!lastWiiState.IRState.Found1)
{
lastWiiState.IRState.Found1 = ws.IRState.Found1;
// smoothingBufferIndex = 0;//resets the count

if (cursorControl)
{
INPUT[] buffer = new INPUT[1];

// right down
buffer[0].type = INPUT_MOUSE;
buffer[0].mi.dx = 0; //(;int)(warpedX * 65535.0f / screenWidth);
buffer[0].mi.dy = 0; //(int)(warpedY * 65535.0f / screenHeight);
buffer[0].mi.mouseData = 0;
buffer[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
buffer[0].mi.time = 0;
buffer[0].mi.dwExtraInfo = (IntPtr)0;

/////////////////////
// left down
/* buffer[1].type = INPUT_MOUSE;
buffer[1].mi.dx = 0;
buffer[1].mi.dy = 0;
buffer[1].mi.mouseData = 0;
buffer[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
buffer[1].mi.time = 0;
buffer[1].mi.dwExtraInfo = (IntPtr)0;
*/
SendInput(1, buffer, Marshal.SizeOf(buffer[0]));
}
}

else
{
aTimer.Stop(); // 计时结束

lastWiiState.IRState.Found1 = ws.IRState.Found1;

if (cursorControl)
{

INPUT[] buffer = new INPUT[1]; // 2 ->3

// 右键
buffer[0].type = INPUT_MOUSE;
buffer[0].mi.dx = 0;
buffer[0].mi.dy = 0;
buffer[0].mi.mouseData = 0;
buffer[0].mi.time = 0;
buffer[0].mi.dwExtraInfo = (IntPtr)0;

// 移动
//buffer[1].type = INPUT_MOUSE;
//buffer[1].mi.dx = 0;
//buffer[1].mi.dy = 0;
//buffer[1].mi.mouseData = 0;
//buffer[1].mi.dwFlags = MOUSEEVENTF_MOVE;
//buffer[1].mi.time = 0;
//buffer[1].mi.dwExtraInfo = (IntPtr)0;

SendInput(1, buffer, Marshal.SizeOf(buffer[0]));
}
}



INPUT[] buffer1 = new INPUT[1]; // 2 ->3

// 左键
buffer1[0].type = INPUT_MOUSE;
buffer1[0].mi.dx = 0;
buffer1[0].mi.dy = 0;
buffer1[0].mi.mouseData = 0;
buffer1[0].mi.time = 0;

{
// MessageBox.Show("Right");
buffer1[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
}

buffer1[0].mi.dwExtraInfo = (IntPtr)0;
SendInput(1, buffer1, Marshal.SizeOf(buffer1[0]));
mut2.ReleaseMutex(); ;
}

请问高手指点,谢谢啦!
...全文
138 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wartim 2008-12-17
  • 打赏
  • 举报
回复
看代码,这东西是不是按下比如按下按钮后蓝牙发送鼠标动作给电脑,按住就是移动,放开移动停止?
你好像吧原来定义为左键操作改成了右键,但这里好像没改掉
buffer1[0].type = INPUT_MOUSE;
buffer1[0].mi.dx = 0;
buffer1[0].mi.dy = 0;
buffer1[0].mi.mouseData = 0;
buffer1[0].mi.time = 0;

{
// MessageBox.Show("Right");
buffer1[0].mi.dwFlags = MOUSEEVENTF_RIGHTUP; }

buffer1[0].mi.dwExtraInfo = (IntPtr)0;
SendInput(1, buffer1, Marshal.SizeOf(buffer1[0]));
pvgyetg 2008-12-16
  • 打赏
  • 举报
回复
友情UP

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧