因此,我只是开始使用C++进行编码,在学习了一点之后,我便开始编写自动答题器。我已经做到了,因此您可以使用键盘上的按钮或类似按钮切换自动答题器,但这不是我想要的。
我遇到的问题是我似乎无法找到一种方法来检查是否按住了鼠标左键。如果按住不放,请继续单击直到不再按住鼠标左键。
另外,我环顾四周以了解如何执行此操作,并且我得到了一些我应该做的不同事情,但是它们都不起作用。有人告诉我使用:
if((GetKeyState(VK_LBUTTON) & 0x100) != 0)
从这个答案here,但我还发现人们被告知要使用:
if(GetKeyState(VK_LBUTTON) & 0x8000
可悲的是,我找不到在历史上找到它的地方。
while (1) {
if(GetKeyState(WM_LBUTTONDOWN)) {
Sleep(delay);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
std::cout << "Clicked" << endl;
}
if (GetKeyState(VK_ESCAPE)) {
break;
}
}
就像我之前说过的,我已经尝试了所有不同的组合来尝试使它起作用。但是我看不到鼠标左键是否被按下。我希望有人能提供答案,并能帮助我和其他人。无论如何,谢谢,祝你有美好的一天。
最佳答案
GetKeyState()
以virtual key code作为输入,但是 WM_LBUTTONDOWN
不是虚拟键码,它是一个窗口消息。请改用VK_LBUTTON
。
另外,GetKeyState()
依赖于调用线程本地的状态机。仅当线程处理其消息队列中的键盘/鼠标窗口消息时,才会更新该状态机。您的代码没有这样的消息处理。对于您要尝试的操作,请改为使用 GetAsyncKeyState()
。
此外,不建议使用 mouse_event()
,并且已经使用了很长时间。请改用 SendInput()
。
试试这个:
while (GetAsyncKeyState(VK_ESCAPE) >= 0)
{
if (GetAsyncKeyState(VK_LBUTTON) < 0)
{
Sleep(delay);
INPUT input[2] = {};
input[0].type = INPUT_MOUSE;
input[0].mi.dx = x;
input[0].mi.dy = y;
input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
input[1] = input[0];
input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(2, input, sizeof(INPUT));
std::cout << "Clicked" << endl;
}
}
关于c++ - 检查鼠标左键是否被按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029712/