如何在鼠标左键按下时触发循环 autoclicker c++
Posted
技术标签:
【中文标题】如何在鼠标左键按下时触发循环 autoclicker c++【英文标题】:How to trigger loop when left mouse down autoclicker c++ 【发布时间】:2020-03-07 08:48:31 【问题描述】:嘿,我试图让我的自动点击器只在我按住鼠标左键时点击。
void clikr()
INPUT Input =0;
int sleepzZz = 1000 / times;
active = false;
system(“cls”);
while(1)
if((GetAsyncKeyState(VK_LBUTTON) & 0x8000) != 0)
Sleep(sleepzZz);
Input.type = INPUT_MOUSE
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT))
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
(我在手机上输入了这个,我很抱歉????) 基本上,循环会自行取消,因为它会发送 leftup。
我知道我可以将它绑定到另一个键,但是当我按住 leftdown 时我将如何让它工作
请帮忙
【问题讨论】:
【参考方案1】:使用GetAsyncKeyState
或GetKeyState
不适合这种情况。这是来自MSDN 的引用,指出您正在尝试做的事情不适合将这两个功能与SendInput
结合使用。
此函数不会重置键盘的当前状态。调用该函数时已按下的任何键都可能会干扰该函数生成的事件。
非常重要:您的目标应该是区分程序未模拟的输入和程序模拟的输入。 这并不意味着您应该使此代码复杂化并使用钩子验证输入是否合法(有关此方法的更多信息,请参见答案here)。您只想查看循环中是否生成了输入。
我想出了这个类似的解决方案,遗憾的是它仍然使用这两个函数,因为我不知道其他会测试输入的函数。 它并不完美,但它是我用简单代码所能得到的最接近的。
VOID WINAPI ClickLoop()
/** wait for any LMB press. */
while ((GetAsyncKeyState(VK_LBUTTON)&0x8000) == 0)
Sleep(1);
INT nCurrKeyState = GetKeyState(VK_LBUTTON);
INT nPrevKeyState;
do
INPUT Input;
ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &Input, sizeof(INPUT));
Sleep(0); // how many miliseconds between the clicks.
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &Input, sizeof(INPUT));
// !! Do not set this number too low
// !! Setting it too low might cause infinite loops
// and you cannot stop your clicks at first try.
Sleep(70); // how many miliseconds the click is held.
nPrevKeyState = nCurrKeyState;
nCurrKeyState = GetKeyState(VK_LBUTTON);
if ((GetAsyncKeyState(VK_LBUTTON)&0x8000) == 0)
break;
while (nCurrKeyState != nPrevKeyState);
在你的主要内容中,你可以有类似的东西:
int main()
while(TRUE)
printf("In click loop...\n");
ClickLoop();
return 0;
不过,这不是一个合适的解决方案,但除了GetAsyncKeyState
和GetKeyState
之外,我不知道任何其他用于测试Windows 上的键的功能。它还有一个缺点,您不能将点击之间的时间设置为小于 70~80 毫秒,或者您可以打破它。
【讨论】:
以上是关于如何在鼠标左键按下时触发循环 autoclicker c++的主要内容,如果未能解决你的问题,请参考以下文章
Chrome浏览器下JQuery实现鼠标左键按下移动,鼠标左键抬起停止移动功能的问题