PostMessage没有点击按钮
PostMessage not clicking buttons
本文关键字:按钮 PostMessage 更新时间:2023-10-16
我玩了PostMessage只是点击不同的选项卡似乎工作。但是我试图自动化一些按钮点击,当运行这个功能时,它突出显示按钮,好像我在它上面徘徊,但不点击。我想不知何故,按钮改变颜色使布尔值为假,所以我添加了按钮颜色的例外,而它的悬停。没有区别,我不希望使用SetCursorPos &使用SendInput模拟鼠标点击。我想了解的问题/问题,我有,为什么它不点击。
void click(const std::vector<uint_16>& x, const uint_16& y)
{
for(uint_8 i = 0; i < 5; i++)
{
if(content::MyClass().firstMatch(GetPixel(hdc, x[i], y)))
{
PostMessage(hwnd, WM_LBUTTONDOWN, 0, MAKELPARAM(x[i], y));
return;
}
}
if(content::MyClass().secondMatch(GetPixel(hdc, x[4], y)))
{
PostMessage(hwnd, WM_LBUTTONDOWN, 0, MAKELPARAM(x[4], y));
}
}
您正在使用的解决方案是不可靠的,因为您正在短路窗口上的输入系统,而不是专门针对您要按的按钮。
至于你的代码当前不工作的原因,你只发送一个WM_LBUTTONDOWN
消息到窗口。由于大多数按钮工作的WM_LBUTTONDOWN
和WM_LBUTTONUP
的组合,您的程序不会导致按钮点击方法激活。
鼠标下压后加入PostMessage(hwnd, WM_LBUTTONUP, 0, MAKELPARAM(x[i], y));
会导致按键点击注册
在未来,作为一个更可靠的解决方案,将专门针对窗口上的按钮并单击它,您可能需要查看BM_CLICK
PostMessage参数。使用这个而不是试图模拟鼠标点击是更正确的,因为窗口将触发事件,否则可能会被遗忘,当使用鼠标向下和鼠标向上post命令。
一个例子:
int retVal = 0;
HANDLE hwndDialog;
HANDLE hwndButton;
/* First, see if the dialog box (titled "Inactivity Warning" ) is currently open. */
hwndDialog = FindWindow( 0, "Inactivity Warning" );
if ( hwndDialog == 0 ) return;
/* Now get a handle to the "Resume" button in the dialog. */
hwndButton = FindWindowEx( hwndDialog, 0, 0, "Resume" );
/* After making sure that the dialog box is the active window, click "Resume". */
retval = SetActiveWindow( hwndDialog );
/* converted from SendMessage. */
retval = PostMessage( hwndButton, BM_CLICK, 0, 0 );
源代码在这里,由我从VB转换而来。
关于输入系统的进一步阅读,这里有一篇很好的文章。
Raymond Chen的一篇博文详细介绍了这些命令及其注意事项。
相关文章:
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- ImGui 在单击按钮后冻结
- WinAPI 无法创建按钮
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- 按钮按下打开 OLED ESP32
- PostMessage没有点击按钮