【问题标题】:Distinguish clicks from mouse_event with hardware clicks将点击与鼠标事件与硬件点击区分开来
【发布时间】:2018-09-03 18:52:21
【问题描述】:

我的目标是制作一个在用户按下鼠标按钮时自动点击的程序。

此刻,我有这个。

while (true)
        {
            Sleep(1);
            if (GetAsyncKeyState(VK_LBUTTON))  

                 {


                    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);




                }
                Sleep(delayy);

但是当我使用它时,它只会启动一个循环,因为程序会不断检测点击并继续发送更多输入。 我该如何解决这个问题?

【问题讨论】:

  • 您想要一个“自动点击”什么的程序?您的程序应该解决的真正问题是什么?
  • 至于你的问题,一个简单的标志告诉你的程序是否调用GetAsyncKeyState(VK_LBUTTON)怎么样?
  • @Some 程序员老兄,我想要在用户按住鼠标左键时发送连续点击的东西。这是为游戏设计的。
  • 除非您想将点击发送给自己,否则您真正想要的是类似SendMessage 将点击发送到特定窗口?
  • 我认为这行不通,因为它需要非常低的延迟。有人对我说了一些关于鼠标钩的事情,但我看不懂文档。

标签: c++ windows click


【解决方案1】:

要确定是否按下了按钮或键,您可以使用以下命令:

if((GetKeyState(VK_LBUTTON) & 0x100) != 0)

对于您正在查找的代码,您可以尝试以下操作:

#include <iostream>
#include <Windows.h>

int main()
{
    while (1)
    {

        if (GetAsyncKeyState(VK_LBUTTON)) {

                keybd_event(VK_LBUTTON, 0x45, KEYEVENTF_KEYUP, 0);
                while (!GetAsyncKeyState(VK_LBUTTON))
                {
                    keybd_event(VK_LBUTTON, 0x45, 0, 0);
                    std::cout << "Click" << std::endl;
                }
        }

        Sleep(100);
    }
}

这可能需要一些优化和修复,但您可以在代码中对其进行整理。

【讨论】:

  • 这没有回答所提出的问题。
  • @IInspectable 如前所述,它确实提供了一些关于他可能会尝试完成 OP 所要求的内容的见解
  • 这个提议的答案包含的唯一潜在见解是使用GetKeyState。但是您不能在此处使用此 API 调用。阅读文档以了解原因。该答案没有提供有关如何区分真实输入和注入输入的信息。也就是说,问题要问的是什么。
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2018-06-29
相关资源
最近更新 更多