我希望能够按键并运行无限循环,并能够按相同的键来停止循环。在一个简单的例子中,我希望脚本无限期地点击:
XButton2::
if (Doing = 0)
{
Doing := 1
While Doing = 1
{
Click
}
return
} else {
Doing := 0
}
不幸的是,这不起作用 - XButton2
不再响应,因为它正在运行脚本。我可以通过其他密钥切换Doing := 0
,但我希望它与XButton2
相同。这样做的简单方法是什么?我会避免复杂的解决方案。
答案 0 :(得分:2)
使用timed subroutine。这就是你通常在ahk中开始/停止循环的方式。
例如:
#include <cstddef>
#include <string>
#include <stdexcept>
template <size_t N>
constexpr size_t arrLen(int(&)[N]) { return N; }
template <typename T, size_t N> using Array = T[N];
int main(int argc, char** argv)
{
Array<int, 6> arr = { 1, 2, 3, 4, 5, 6 };
arrLen(arr);
int * p = &arr[1];
size_t len = argc>1? std::stoul(argv[1]) : 3ul;
size_t result;
switch (len) {
case 1: result = arrLen(reinterpret_cast<Array<int, 1>& >(*p)); break;
case 2: result = arrLen(reinterpret_cast<Array<int, 2>& >(*p)); break;
case 3: result = arrLen(reinterpret_cast<Array<int, 3>& >(*p)); break;
case 4: result = arrLen(reinterpret_cast<Array<int, 4>& >(*p)); break;
case 5: result = arrLen(reinterpret_cast<Array<int, 5>& >(*p)); break;
case 6: result = arrLen(reinterpret_cast<Array<int, 6>& >(*p)); break;
case 7: result = arrLen(reinterpret_cast<Array<int, 7>& >(*p)); break;
case 8: result = arrLen(reinterpret_cast<Array<int, 8>& >(*p)); break;
case 9: result = arrLen(reinterpret_cast<Array<int, 9>& >(*p)); break;
case 10: result = arrLen(reinterpret_cast<Array<int, 10>& >(*p)); break;
case 11: result = arrLen(reinterpret_cast<Array<int, 11>& >(*p)); break;
default: throw std::range_error("len");
}
return result;
}
这就是我经常这样做的方式,虽然我很想看到更紧凑的版本。