gpt4 book ai didi

c - 为什么我的键盘记录器不起作用?

转载 作者:太空狗 更新时间:2023-10-29 15:35:54 28 4
gpt4 key购买 nike

在学习了 C 的基础知识之后,我开始研究一些 Win API 函数。出于教育目的,我决定尝试制作一个简单的键盘记录器。它所做的只是记录击键并将它们保存到 .txt 文件中。我在 Internet 上看到了一些示例,但我想按照自己的方式进行(更简单)。这是我的代码(我不知道为什么它不起作用)(我还没有完成):

#include <stdio.h>
#include <windows.h>

int main( void )
{
short UserInputtedCharacter;
FILE *LogFile = fopen("log.txt", "a");

//Hide console window
HWND HideWindow;
AllocConsole();
HideWindow = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(HideWindow, 0);

while(1)
{
GetAsyncKeyState(UserInputtedCharacter);

switch(UserInputtedCharacter)
{
case VK_SPACE:
fputc(' ', LogFile);
break;
case VK_RETURN:
fputc('\n', LogFile);
break;
case VK_BACK:
fputs("[BACKSPACE]", LogFile);
break;
case VK_DELETE:
fputs("[DEL]", LogFile);
break;
case VK_CAPITAL:
fputs("[CAPS LOCK]", LogFile);
break;
case 0x30:
fputc('0', LogFile);
break;
case 0x31:
fputc('1', LogFile);
break;
case 0x32:
fputc('2', LogFile);
break;
case 0x33:
fputc('3', LogFile);
break;
case 0x34:
fputc('4', LogFile);
break;
case 0x35:
fputc('5', LogFile);
break;
case 0x36:
fputc('6', LogFile);
break;
case 0x37:
fputc('7', LogFile);
break;
case 0x38:
fputc('8', LogFile);
break;
case 0x39:
fputc('9', LogFile);
break;
case 0x61:
fputc('a', LogFile);
break;
case 0x62:
fputc('b', LogFile);
break;
case 0x63:
fputc('c', LogFile);
break;
case 0x64:
fputc('d', LogFile);
break;
}
}
fclose(LogFile);
return 0;
}

程序未将击键保存到 .txt 文件。

顺便说一句,这个程序远未完成,我只是想知道为什么它不起作用。

最佳答案

有很多事情需要解决。

  1. GetAsyncKeyState 不修改给定的参数。您可以按照编写的方式完全删除调用。您的编译器可能会提示 UserInputtedCharacter 在初始化之前被读取。
  2. Windows 程序是基于事件的。你should write an event loop并查找 WM_KEYDOWN 和 WM_KEYUP。
  3. 你有一个非常紧凑的循环,它会消耗它运行的核心的所有 CPU。如果您不想要/不需要事件循环,请查看 getc() 或类似内容。
  4. 进程在默认情况下是完全隔离的。阅读每个应用程序的击键是很困难的。

当然,没有什么是学不会的。但是考虑从一个更简单的项目开始。连接到 Internet 并检索 StackOverflow 主页的独立应用程序应该具有足够的挑战性。

关于c - 为什么我的键盘记录器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com