无法从 C/C++ 代码中单击我的鼠标

Posted

技术标签:

【中文标题】无法从 C/C++ 代码中单击我的鼠标【英文标题】:Unable to click my mouse from C/C++ code 【发布时间】:2015-01-11 10:56:48 【问题描述】:

我正在尝试通过键盘控制鼠标。为此,我使用了两个头文件:-

#include <conio.h>
#include <windows.h>

获取我调用的当前位置

POINT p;
GetCursorPos(&p);

要向右移动光标,我调用

 p.x += 10;

为了将光标移动到所有其他方向,我使用上述方法。直到现在一切都很好。但我不知道如何从我的代码中左键单击鼠标。所以请告诉我有什么方法可以做到这一点

【问题讨论】:

PostMessage(...,WM_LBUTTONDOWN,...) “我无法从我的代码中弄清楚如何左键单击鼠标”是我们无法解决的问题,因为如果不查看错误代码我们实际上不知道出了什么问题.另外你的问题是什么? @huseyintugrulbuyukisik 你的评论对修复他的光标有什么帮助? 其实我不知道点击鼠标左键应该调用什么函数 @bot 他将搜索并学习如何使用 postmessage 来模拟使用键盘的点击 @MartinJames :您可以在输入缓冲区中插入事件以模拟鼠标点击,从 OP 自己的答案看来,这正是他想要的。 【参考方案1】:

得到我的答案,这是左键的功能:-

void LeftClick ( )
  
  INPUT    Input=0;
  // left down 
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
  ::SendInput(1,&Input,sizeof(INPUT));

  // left up
  ::ZeroMemory(&Input,sizeof(INPUT));
  Input.type      = INPUT_MOUSE;
  Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
  ::SendInput(1,&Input,sizeof(INPUT));

感谢大家的帮助。

【讨论】:

使用SendInput 的全部目的是防止合成输入与其他来源生成的输入相互穿插。用一个大小的数组连续调用它两次等于完全错过了这一点。这在文档中有明确说明。【参考方案2】:

在 Win32 控制台应用程序中,可以通过ReadConsoleInput 读取鼠标状态。它填充了一个由INPUT_RECORD 结构组成的数组,其中包含鼠标状态等内容。

这是一个使用示例:http://blogs.msdn.com/b/oldnewthing/archive/2013/05/06/10416225.aspx

请注意,作为低级控制台 I/O 命令,它可能会干扰更高级别的 I/O,例如 conio 或 stdio。您应该通过此函数处理所有控制台 I/O 以避免这种情况吗?

【讨论】:

以上是关于无法从 C/C++ 代码中单击我的鼠标的主要内容,如果未能解决你的问题,请参考以下文章

无法通过鼠标单击移动 QGraphicsRectItem

怎么在matlab中鼠标在坐标图上单击,记录下这一点的坐标啊

在鼠标单击时将 x 和 y 线保存为变量

如何从鼠标右键单击获取文本?

在另一个 swf 中加载鼠标单击事件的 swf

在打开的cv c ++中单击鼠标右键时如何从视频中捕获图像