2017-04-21 36 views
0

爲一個公司建立一個安全實現,需要捕獲在特定窗口中按下的所有按鍵,並將它們保存在一個緩衝區中,以便每5分鐘將它們轉儲到一個文件中。動態緩衝區保存按下的鍵 - C++

然後,每隔7分鐘通過郵件發送日誌並刪除文件。這是否是一個不錯的選擇?有更好的選擇嗎?

緩衝區是爲了防止刪除文件時使用該文件。

呈現給我的問題是,我應該爲此使用什麼樣的緩衝區?它必須是動態的,因爲我不知道在保存文件之前要按多少個按鍵。

或者有沒有什麼辦法可以在每次文件變滿時將靜態緩衝區轉儲到文件中?

+1

已經有產品可以做到這一點。 – Pavel

回答

1

簡單std::vector就可以達到這個目的,因爲它會自動增長,其增長策略可以很好地處理您的情況。您最好使用std::list,但將矢量保存到文件可能更容易。 對於每個按鍵,我會存儲一些結構來保存關於按鍵事件的信息。如果同時在窗戶上,它可能只是存儲你處理的每個keyboard message的lParam和wParam。您需要wParam來存儲每個鍵附帶的額外信息,例如按下某個鍵時的Ctrl + Alt鍵。 例如:

#include <windows.h> 

struct keypress 
{ 
    UINT lParam; // The character code of the key. 
    UINT wParam; // The repeat count, scan code, extended-key flag etc. 
}; 
typedef std::vector<keypress> keystore; 

你不妨使用字符串,但它寧願不要,有必要在這裏字符串。如果你只是簡單的文本輸入案例,你可能會確定即使有一些簡單的事情,如typedef std::vector<char> keystore;

+0

我應該使用哪種數據類型?我需要保存鍵,日期和一些文字(日誌) – Manuel23

+0

矢量是不錯的選擇? – Manuel23