如何协调Getasynckeystate阻止的Sendmessage、SendInput和鼠标事件?

如何协调Getasynckeystate阻止的Sendmessage、SendInput和鼠标事件?,c,vb6,sendmessage,sendinput,C,Vb6,Sendmessage,Sendinput,TL;医生: 我需要同时使用sendmessage和sendinput,以便进入无法重新构建的程序中的旧函数/事件。在那里,我无法使用我最初使用的任何方法来释放虚拟鼠标点击——它们被忽略了。 任何其他触发mousedown事件的方法——我也可以释放鼠标点击的方法——都可能奏效 我正在编写一个程序,它必须与一个很久以前用VB6编写的黑盒旧软件进行交互。 我的程序必须能够发送鼠标点击,特别是mousedown和mouseup事件到旧程序 这里是棘手的部分。。。 旧程序中的mousedown事件使用

TL;医生: 我需要同时使用
sendmessage
sendinput
,以便进入无法重新构建的程序中的旧函数/事件。在那里,我无法使用我最初使用的任何方法来释放虚拟鼠标点击——它们被忽略了。 任何其他触发mousedown事件的方法——我也可以释放鼠标点击的方法——都可能奏效


我正在编写一个程序,它必须与一个很久以前用VB6编写的黑盒旧软件进行交互。 我的程序必须能够发送鼠标点击,特别是mousedown和mouseup事件到旧程序

这里是棘手的部分。。。 旧程序中的mousedown事件使用:

While GetAsyncKeyState(1)
Wend
等待用户释放鼠标

目前,为了触发事件,我需要使用:

SendMessage(control_handle, WM_LBUTTONDOWN, 0, 0);

Input.type      = INPUT_MOUSE;
Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
SendInput(1,&Input,sizeof(INPUT));
这确实会触发事件(仅使用
sendmessage
不会触发事件内部的必要分支,因为该分支也是通过
GetAsyncKeyState(1)
测试输入的),但发出以下任意组合都不会释放鼠标点击:

SendMessage(control_handle, WM_LBUTTONUP, 0, 0)
Input.type      = INPUT_MOUSE;
Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
SendInput(1,&Input,sizeof(INPUT));
代码只是在while/wend部分不断重复,它永远不会出来。正在发送发布代码,但
GetAsyncKeyState(1)
未将其识别为鼠标发布。超级奇怪的是
GetAsyncKeyState(1)
将函数识别为鼠标按下事件,而
GetAsyncKeyState(1)
将无法识别为鼠标向上

我测试的内容:

  • 在屏幕上的其他地方单击真正的鼠标确实会释放 功能

  • 删除sendmessage调用,只使用sendinput函数 (并手动将鼠标放置在需要的对象上 单击)可以释放循环

    我不能指望用户在这段时间内不摆弄鼠标 做它的事情,所以我犹豫是否让代码实际上移动 将鼠标悬停在要单击的按钮上

  • 我也尝试过不推荐使用的mouse\u事件函数,完全相同 行为

时机至关重要。在触发器发出和触发时间之间不可能有实质性的延迟。想想键盘的响应速度

我编写了一个非常简单的VB6程序来模拟
while/GetAsyncKeyState(1)/wend
循环来测试这一点,其行为是相同的-因此我可以确信在旧程序中没有什么奇怪的东西导致这种情况发生


非常感谢您的阅读和帮助

以防其他人也会遇到这种情况。。。。使用postmessage而不是sendmessage允许程序继续。有道理,真的….

以防其他任何人遇到这种情况。。。。使用postmessage而不是sendmessage允许程序继续。有道理,真的…有趣的问题。如果你的最后一句话是说你找到了解决办法,我想你应该在下面加上这句话作为真正的答案。祝你好运