c# определить нажатие клавиши в консольном проекте [требует правки]

280
14 марта 2017, 11:49

мне нужно определить нажатие клавиш в консольном проекте (не набора в консоли)

как это можно реализовать?

Объясню задачу и свой проект подробней я делаю не большую консольную игру и мне для управления персонажем нужно пучить данные о нажатии клавиш так как картинка выводится в консоль а консоль постоянно чистится и снова отрисовывается водить данные в неё нельзя и по этому мне нужно каким то другим способом получать данные о нажатии клавиш.

Answer 1

Самый банальный способ определения нажатия клавиш для случая, когда Ваше приложение не является фоновым и активно:

public class Program
{
    public static void Main()
    {
        ConsoleKeyInfo key;
        do
        {
            key = Console.ReadKey();
            Console.WriteLine(key.Key + " клавиша была нажата");
        }
        while (key.Key != ConsoleKey.Escape); // по нажатию на Escape завершаем цикл
    }
}

Если же нужен способ отслеживания нажатия клавиш, когда приложение не активно и является фоновым процессом, то нам нужно импортировать методы вспомогательной библиотеки user32.dll:

[DllImport("user32.dll")] 
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

Есть хороший ответ, касаемо этого варианта: Capture a keyboard keypress in the background. В принципе, если воспользоваться поиском, то ответы можно найти. Или вот готовый хороший и полноценный ответ: Background Key Press Listener

Answer 2

https://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

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

Answer 3

Хочешь сделать кейлоггер? Аяяй. По попе за такое нужно бить.

Но в целом ответ следующий: нужно использовать WinApi для этого и отлавливать ивенты самой операционной системы. Эта статья поможет: http://www.dreamincode.net/forums/topic/180436-global-hotkeys/

Но проще будет наработки чужие использовать. Например, даный проект делает именно то, что тебе нужно, используя более чем простой синтаксис: https://github.com/fabriciorissetto/KeystrokeAPI. Долго разбиратся не придется.

READ ALSO
Нахождение искомый строки более 1 раза

Нахождение искомый строки более 1 раза

1) Пытаюсь сделать поиск в DataGridView с помощью операций LINQ:

200
oracle: Именованные параметры или их порядок?

oracle: Именованные параметры или их порядок?

даже не знаю с чего начать

289
entity framework 6 и sSQLite

entity framework 6 и sSQLite

Получаю ошибки: SQLite error (1): no such table: __MigrationHistory SQLite error (1): no such table: __MigrationHistory SQLite error (1): no such table: EdmMetadata

281
Где достать Roslyn?

Где достать Roslyn?

Доброго времени сутокГде достать библиотеки для использования Roslyn? Смотрел примеры на этом сайте: https://blogs

178