Luc*_*cas 5 c# mouseevent winforms kinect
因此,我尝试模拟鼠标左键单击和鼠标左键释放以进行一些自动拖放。
目前它在C#Winforms中(是的,winforms:|),有点像鹅。
基本上,一旦发送了Click,我希望它根据Kinect输入来更新光标位置。Kinect方面很好,但是我不确定如何找到按钮是否仍处于按下状态。
这是我当前正在使用的代码+一些psuedocode以帮助更好地解释自己(做的时候)。
class MouseImpersonator
{
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const int leftDown = 0x02;
private const int leftUp = 0x04;
public static void Grab(int xPos, int yPos)
{
Cursor.Position = new Point(xPos + 25, yPos + 25);
mouse_event(leftDown, (uint) xPos, (uint) yPos, 0, 0);
//do
//{
//Cursor.Position = new Point(KinectSettings.movement.LeftHandX, KinectSettings.movement.LeftHandY);
//} while (the left mouse button is still clicked);
}
public static void Release(int xPos, int yPos)
{
Cursor.Position = new Point(xPos + 25, yPos + 25);
mouse_event(leftUp, (uint) xPos, (uint) yPos, 0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
我搜寻过Google,除了WPF等效项之外,找不到任何我需要的东西:http : //msdn.microsoft.com/zh-cn/library/system.windows.input.mouse.aspx
我有点不尽如人意,但是任何帮助都将不胜感激。
卢卡斯
最简单的答案实际上是使用 bool 并检查发生了什么。
我在一个新线程上启动它,因此它不会破坏其他所有内容。
理想情况下,你应该稍微整理一下。
public static void Grab(int xPos, int yPos)
{
_dragging = true;
Cursor.Position = new Point(xPos, yPos + offSet);
mouse_event(leftDown, (uint) xPos, (uint) yPos, 0, 0);
var t = new Thread(CheckMouseStatus);
t.Start();
}
public static void Release(int xPos, int yPos)
{
_dragging = false;
Cursor.Position = new Point(xPos, yPos + offSet);
mouse_event(leftUp, (uint) xPos, (uint) yPos, 0, 0);
}
private static void CheckMouseStatus()
{
do
{
Cursor.Position = new Point(KinectSettings.movement.HandX, KinectSettings.movement.HandY + offSet);
}
while (_dragging);
}
Run Code Online (Sandbox Code Playgroud)