调用SendInput
来模拟按下左键单击似乎是在执行下面写入SendInput
的调用后执行的代码后执行的。
我创建了一个列表框,我想要右键单击从列表框中选择项目,所以我决定在打开上下文菜单之前立即发送消息WM_CONTEXTMENU
调用SendInput
来模拟左键单击,但是我相信在左键单击发生之前弹出上下文菜单,导致左键单击上下文菜单的边缘(什么都不做)。
在调用SendInput和创建弹出菜单之间添加MessageBox(0,0,0,0);
会导致左键单击成功发生并选择一个项目,这是我期望和期望的行为。调用SendInput后奇怪地调用Sleep(1000)
会延迟程序,但不会导致SendInput按预期运行。
编辑:是的我知道我的问题的一个解决方案是使用LB_SETSEL选择它,但我部分用于学习目的,如果我遇到类似的问题使用SendInput我想知道如何解决它,所以请帮我解决这个具体的错误。
答案 0 :(得分:2)
SendInput()
只是将键盘注入键盘的输入缓冲区,然后立即退出,让Windows应用程序执行其他操作,而Windows在后台处理击键,就像用户手动键入它们一样。这不是解决问题的方法。
在WM_CONTEXTMENU
处理程序中,只需将LB_SETCURSEL
消息(对于单选ListBox)或LB_SETSEL
消息(对于多选ListBox)直接发送到ListBox&# 39; s HWND选择所需的列表项,然后显示弹出菜单。