2017-04-21 37 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