当运行Windows SendInput API时,监控器会闪烁。

问题描述 投票:1回答:1

好吧,我当然应该去学python,因为我做了几个这种类型的函数,键盘事件和鼠标事件,但决定尝试学习windows api。

我的目标是知道鼠标的1号键何时被按下。

我以一种非常初级的方式创建了这个文件,它在mouseData中只返回0.奇怪的是,每当我运行它时,它在显示器上以很短的时间间隔闪烁,但在它关闭时则在1秒之间。非常奇怪,执行不下去。

谁能帮我了解一下,并试着执行一下,看看是不是只有这里有问题。

代码。

int main()
{
    DWORD mouseData = 0;

    MOUSEINPUT tagMouse;
    tagMouse.dx = 0;
    tagMouse.dy = 0;
    tagMouse.mouseData = mouseData;
    tagMouse.dwFlags = MOUSEEVENTF_XDOWN;
    tagMouse.dwExtraInfo = 0;

    INPUT tagInput;
    tagInput.type = INPUT_MOUSE;
    tagInput.mi = tagMouse;

    while (true) {
        if (GetAsyncKeyState(VK_DELETE)) break;
        SendInput(1, &tagInput, sizeof(INPUT));
        printf("KEYWORD: %d\n", mouseData);
        Sleep(500);
    }
    system("pause");
    return 0;
}
c visual-studio-2015 mouseevent
1个回答
0
投票

I 可以 重现你所报告的 "症状"--效果真的很残酷!

现在,虽然我不能提供一个完整的解释,但我 可以 提供一个修复方法 您在您的应用程序中存在一个未初始化的字段 tagMouse 架构 time 成员,这是系统使用的时间戳)。) 将其设置为零(告诉系统生成自己的时间戳)就可以解决这个问题。所以,只需将这行添加到你的其他初始化语句中。

//...
    tagMouse.dwExtraInfo = 0;
    tagMouse.time = 0; // Adding this line fixes it!
//...

希望能帮到你!

注意:我也希望得到更全面的解释;然而,对我来说,一个未初始化的字段,闻起来就像未定义的行为!我尝试了各种其他值。我已经尝试了各种其他的值(即不为零),来为 time 领域,但还没有找到能用的。

讨论 在开发博客上 帮助。这句话似乎很有意义。

谁知道如果一个程序检查时间戳 发现它们不是来自未来就是回到了过去 会造成什么样的破坏

© www.soinside.com 2019 - 2024. All rights reserved.