我正在编写一个程序来捕获光标位置,并将其存储在x坐标的int x[]
和y坐标的int y[]
中。
但是,当我将数组传递给带有for循环的函数时,该函数应该将鼠标的坐标设置为存储在数组中的坐标,并通过每个元素递增,for循环似乎并不会递增i。 >
void click(clock_t &st, int x[], int y[]);
int x[] = { 0, 0, 0, 0, 0, 0, 0 };
int y[] = { 0, 0, 0, 0, 0, 0, 0 };
int amtToggled = 0; //Controlled by hotkeys utilizing GetAsyncKeyState.
if (GetAsyncKeyState(VK_F1) && !inMenu)
{
GetCursorPos(&n);
x[0] = n.x;
y[0] = n.y;
uWindow = true;
Sleep(150);
}
void click(clock_t &st, int x[], int y[])
{
for (int i = 0; i < amtToggled; i++)
{
float te = clock() - st;
if ((te / CLOCKS_PER_SEC) >= (aDelay / 1000))
{
LOG(i);
SetCursorPos(x[i], y[i]);
mouse_event(MOUSEEVENTF_LEFTDOWN, q, z, 0, 0);
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTUP, q, z, 0, 0);
Sleep(50);
st = clock();
}
}
}
for循环应“遍历”数组并将鼠标位置设置为存储在数组的每个x和y对应元素中的坐标,从而在每次迭代时增加元素位置。相反,我只是保持0。
编辑#1:完整来源:https://pastebin.com/HdaaBbKm
答案 0 :(得分:1)
好的,会发生什么。此条件仅(可能)对i = 0
为真:
if ((te / CLOCKS_PER_SEC) >= (aDelay / 1000))
为什么?完成使用i = 0
后,您将更新st
。
在下一次迭代中,您将计算te = clock() - st
。
但是计算机非常快,因此te
可能为零(或一些小数字,如1)。
最后,i > 0
te / CLOCKS_PER_SEC
比1.02
小得多,因此您永远不会输入其他变量的主体。
由于您可能只想在暂停aDelay / 1000
的位置上进行迭代,因此只需使用Sleep(aDelay)
而不是if
。
以后,请发布MVCE,以免浪费时间处理其他可能的问题。