尝试模拟鼠标单击/拖动

2023-11-21

所以我试图模拟鼠标左键单击和鼠标左键释放来进行一些自动拖放。

它目前在 C# Winforms 中(是的,winforms :|)并且有点笨拙。

基本上,一旦发送“点击”,我希望它根据 Kinect 输入更新光标位置。 Kinect 方面的事情很好,但我不确定如何确定按钮是否仍然按下。

这是我当前正在使用的代码+一些伪代码,以帮助更好地解释我自己(do while)。

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);
    }
}

我在 google 上搜索了一下,除了 WPF 等效项之外找不到任何我需要的东西:http://msdn.microsoft.com/en-us/library/system.windows.input.mouse.aspx

我有点超出我的深度,但非常感谢任何帮助。

Lucas.

    -

最简单的答案实际上是使用 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);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试模拟鼠标单击/拖动 的相关文章

随机推荐

  • SwiftUI macos NSWindow 实例

    Using xcode 12 3 and swift 5 3与SwiftUI App构建一个生命周期macOS应用程序 访问和更改应用程序的外观和行为的最佳方式是什么NSWindow Edit 我真正追求的是NSWindow实例 我添加了一
  • 在Python中禁用或锁定鼠标和键盘?

    有没有办法使用 python 禁用或锁定鼠标和键盘 我想冻结鼠标并禁用键盘 我还没有测试过 实际上我已经测试了鼠标部分 它的工作很烦人 但是像这样使用pyhook会做你想做的事 import pythoncom pyHook def uMa
  • Django 项目:名称空间“admin”不是唯一的

    在尝试运行 C Python34 python manage py makemigrations 时 我收到以下错误 遵循来自www testandtrack io Error WARNINGS urls w005 URL namespac
  • 以编程方式更改语言(Android N 7.0 - API 24)

    我使用以下代码在我的应用程序中设置特定语言 语言保存到SharedPreferences在应用程序内 它可以完美地工作到 API 级别 23 使用 Android NSharedPreferences效果也很好 它返回正确的语言代码字符串
  • Android webview读取cookies

    我有以下代码来在网络视图中显示网页 WebView myWebView WebView findViewById R id webView1 myWebView loadUrl http the url com WebSettings we
  • 取消引用变量的闭包有用吗?

    我不确定取消引用变量是否或何时有用 以提高性能 var x a b c d some key f while loop do something with x 似乎比 while loop do somthing with a b c d
  • 在 azure-devops 中的发布管道期间创建标签

    Setup 当运行发布管道时 我这样做 使用构建管道项目A的工件 它使用存储库项目A 这个工件是一个节点包构建 我将注入 重新版本 包版本 使用管道变量VERSION 然后作为最后一步发布到 npm 注册表 Goal除了所有构建 发布任务工
  • 当我退出应用程序时 Android 服务停止

    我有一个带有服务的应用程序 服务由应用程序在创建方法的主活动中启动 当我退出应用程序时 出现问题 服务停止 有时立即重新启动 有时最近重新启动 我在4 1 2版本和2 3 6版本中进行了测试 2 3 6 版本中不再提供服务 我的做法有错吗
  • 使用boto3从公共存储桶下载

    我正在尝试列出 AWS 上公共存储桶中的文件 但我得到的最好结果是列出我自己的存储桶和我自己的文件 我假设 boto3 正在使用我在系统中配置的凭据来列出我的东西 如何强制它从特定存储桶列出 而不是我自己的存储桶 http sentinel
  • Qt QPlainTextEdit背景

    我想改变一个的背景颜色QPlainTextEdit 我该怎么做呢 修改纯文本编辑的调色板 示例程序 include
  • 错误java.lang.IndexOutOfBoundsException:无效索引0,大小在我的程序android中为0

    我开始在android中开发 我尝试修改Snake代码以包括对浏览器的调用以显示网页 当我执行我的应用程序时 它显示brwser中的页面 但是当我回到snake应用程序时 它显示了问题消息表明应用程序意外停止 并且 logCat 显示以下异
  • 我可以使用 pthread_kill 停止(暂停)pthread 执行吗

    如果我向线程发送 SIGTSTP 信号 线程会停止吗 或者换句话说 它的行为会像 SIGTSTP 和 SIGCONT 上的进程一样吗 提前致谢 来自 man 3p pthread kill 请注意 pthread kill 仅导致在给定线程
  • 通过 VS 2015 RC 进行非 Azure 部署

    I m trying out ASP NET 5 and all its new features on VS 2015 Enterprise RC To ensure smooth end to end deployment I then
  • 在 Windows 中创建临时目录?

    在 Windows 中获取临时目录名称的最佳方法是什么 我看到我可以使用GetTempPath and GetTempFileName创建一个临时文件 但是有没有相当于Linux BSD的mkdtemp创建临时目录的函数 不 没有与 mkd
  • 如何在 Microsoft Visual Studio 2012 中制作项目/解决方案的副本?

    正如标题所述 如何在 Microsoft Visual Studio 2012 中制作项目 解决方案的副本 就是这么简单的一个选项 却似乎不可用 好消息是 如果您安装了 Blend for Visual Studio 2012 它随我的 M
  • 将选定的语言选项存储在 cookie/localSession 中

    我希望我的 Next js 应用程序记住用户喜欢哪种语言 因此我想将其存储在客户端的 cookie 中 我有 2 种语言选项 英语和法语 默认情况下 语言设置为英语 无 cookie myapp com 但是一旦用户点击 EN 首选项 UR
  • Emacs 和 Git 在 Windows 上显示错误的时间

    Emacs 与系统时间相差两个小时 我尝试用谷歌搜索这个问题 但没有成功 我需要配置什么来纠正这个问题 我怀疑这是从 GMT 到我住的地方的差异 我在 GMT 2 时区 也就是说 如果我从系统时间 2 中减去 我将得到 Emacs 中的时间
  • 如何从 survfit 对象中提取值

    我创建了这个模型 model lt survfit Surv time status c sex model 输出是 Call survfit formula Surv time status c sex records n max n s
  • 突破filter()函数

    我想优化依赖于 filter 的函数 在某些情况下 当它们达到某些元素时 我想摆脱它们 例如 我可能有一个由不同元素组成的数组 或者 我只想实现一种 findFirst 功能 在这种情况下 函数继续执行到数组末尾似乎效率很低 这对于循环来说
  • 尝试模拟鼠标单击/拖动

    所以我试图模拟鼠标左键单击和鼠标左键释放来进行一些自动拖放 它目前在 C Winforms 中 是的 winforms 并且有点笨拙 基本上 一旦发送 点击 我希望它根据 Kinect 输入更新光标位置 Kinect 方面的事情很好 但我不