【发布时间】:2014-07-31 13:49:54
【问题描述】:
调用SendInput 来模拟按下左键似乎是在执行下面编写的对SendInput 的调用的代码之后执行的。
我创建了一个列表框,我想右键单击以从列表框中选择项目,因此我决定在打开上下文菜单之前立即发送消息 WM_CONTEXTMENU 调用 SendInput 以模拟左键单击,但我相信上下文菜单在左键单击之前弹出,导致左键单击上下文菜单的边缘(什么都不做)。
在调用 SendInput 和创建弹出菜单之间添加MessageBox(0,0,0,0); 会导致成功发生左键单击并选择一个项目,这是我期望和期望的行为。奇怪的是,在调用 SendInput 之后调用 Sleep(1000) 会延迟程序,但不会导致 SendInput 的行为符合预期。
编辑:是的,我知道我的问题的一个解决方案是使用 LB_SETSEL 来选择它,但我这样做部分是为了学习目的,如果我使用 SendInput 遇到类似问题,我想知道如何解决它,所以请帮我解决这个特定的错误。
【问题讨论】:
-
我建议不要花太多时间调试这个问题,因为这确实是一个X-Y situation。模拟鼠标单击不是从上下文菜单中选择项目的合理方式。为什么不能只通过 ListBox 的常规编程 API 选择项目?
-
MessageBox泵送消息,Sleep不会。了解您的问题需要对 Windows 消息队列有很好的了解。但正如 Cody 所说,您肯定是以错误的方式做这件事,而最好的解决方法就是为您的问题找到正确的解决方案,无论它到底是什么。 -
如果你想了解你的程序为什么会这样,你需要了解消息队列。你了解排队吗?
-
我想没有达到我应该的程度,有什么推荐的阅读材料吗?