gpt4 book ai didi

c++ - 调用 SendInput() 会导致意外行为

转载 作者:行者123 更新时间:2023-11-28 02:43:51 24 4
gpt4 key购买 nike

调用 SendInput 来模拟按下左键单击似乎是在执行下面所述调用 SendInput 的代码之后执行的。

我制作了一个列表框,我想右键单击以从列表框中选择项目,所以我决定让消息 WM_CONTEXTMENU 调用 SendInput 来模拟左键单击打开上下文菜单,但我相信上下文菜单在左键单击发生之前弹出,导致左键单击上下文菜单的边缘(什么都不做)。

在调用 SendInput 和创建弹出菜单之间添加 MessageBox(0,0,0,0); 会导致左键单击成功并选择一个项目,这是我期望和渴望的行为。在调用 SendInput 后​​奇怪地调用 Sleep(1000) 会延迟程序,但不会导致 SendInput 按预期运行。

编辑:是的,我知道我的问题的一种解决方案是使用 LB_SETSEL 选择它,但我部分这样做是出于学习目的,如果我使用 SendInput 遇到类似问题,我想知道如何解决它,所以请帮我解决这个特定的错误。

最佳答案

SendInput() 只是将击键注入(inject)键盘的输入缓冲区,然后立即退出,让您的应用程序做其他事情,而 Windows 在后台处理击键,就好像用户手动输入一样。这不是您问题的解决方案。

在您的 WM_CONTEXTMENU 处理程序中,只需发送 LB_SETCURSEL消息(对于单选列表框)或 LB_SETSEL将消息(对于多选列表框)直接发送到列表框的 HWND,以便在显示弹出菜单之前选择所需的列表项。

关于c++ - 调用 SendInput() 会导致意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com