无法从 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++ 代码中单击我的鼠标的主要内容,如果未能解决你的问题,请参考以下文章