嘿,我试图让我的自动点击器仅在按住鼠标左键时单击。
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。
我知道我可以将它绑定到另一个键,但是当我按住左键时我该如何让它工作
请帮忙
Using GetAsyncKeyState
or GetKeyState
对于这种情况来说是不好的。这是引用自MSDN https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendinput明确指出您想要做的事情不适合与这两个函数结合使用来完成SendInput
.
此功能不会重置键盘的当前状态。调用该函数时已按下的任何键都可能会干扰该函数生成的事件。
很重要:您的目标应该是区分程序未模拟的输入和程序模拟的输入。
这并不意味着您应该使这段代码复杂化并使用钩子验证输入是否合法(有关此方法的更多信息请参阅答案here https://stackoverflow.com/questions/4553777/detecting-simulated-keyboard-mouse-input)。您只想查看循环中是否生成了输入。
我想出了这个类似的解决方案,遗憾的是它仍然使用这两个函数,因为我不知道其他将测试输入的函数。它并不完美但这是我可以通过简单代码得到的最接近的结果。
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);
}
在你的 main 中你可以有类似的东西:
int main()
{
while(TRUE)
{
printf("In click loop...\n");
ClickLoop();
}
return 0;
}
Still, 这不是一个正确的解决方案但我不知道除了 Windows 上测试按键的任何其他功能GetAsyncKeyState
and GetKeyState
。它也有一个缺点,你不能将点击之间的时间设置为小于 70~80 毫秒,否则你可能会打破它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)