Динамический буфер для сохранения нажатых клавиш - С++

Я создаю реализацию безопасности для компании, мне нужно захватить все клавиши, нажатые в определенном окне, и сохранить их в буфере, чтобы выгружать их в файл каждые 5 минут.

Затем каждые 7 минут лог отправляется по почте и файл удаляется. Это хороший выбор? Есть ли лучший вариант?

Буфер предназначен для предотвращения использования файла при его стирании.

Проблема, которая мне представляется, заключается в том, какой буфер я должен использовать для этой цели? Он должен быть динамическим, так как я не знаю, сколько клавиш будет нажато до сохранения файла.

Или есть способ сбрасывать статический буфер в файл каждый раз, когда он заполняется?


person Manuel23    schedule 21.04.2017    source источник
comment
уже есть продукты, которые делают это.   -  person Pavel P    schedule 21.04.2017


Ответы (1)


Простой std::vector подойдет для этой цели, так как он растет автоматически и его стратегия роста хорошо справится с вашим сценарием. Вы также можете использовать std::list, но сохранение вектора в файл может будь проще. Для каждого нажатия клавиши я бы сохранил некоторую структуру для хранения информации о событии нажатия клавиши. Если вы работаете в Windows, может иметь смысл просто хранить 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;

person Pavel P    schedule 21.04.2017
comment
И какой тип данных я должен использовать? Мне нужны ключи сохранения, дата и текст (журнал) - person Manuel23; 21.04.2017