Read keyboard inputs without always having my console application focused?

667 Views Asked by At

is it possible to read keyboard inputs without always having my console application focused? I would like to do something with a button without always going to the console.

Doesn't that somehow work with events? Unfortunately I only found unsightly solutions with Forms.

This solution from @Siarhei Kuchuk didn't help me either: Global keyboard capture in C# application

The OnKeyPressed event is activated but is not triggered.

Does somebody has any idea?

1

There are 1 best solutions below

0
On BEST ANSWER

That's possible. You may google "keyloggers" and find many examples but I'm gonna give you a very rough bare boned one. But first you have to add a refrence to System.Windows.Forms.dll for this to work

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        [DllImport("User32.dll")]
        private static extern short GetAsyncKeyState(System.Int32 vKey);
        static void Main(string[] args)
        {
            while (true)
            {
                Thread.Sleep(500);
                for (int i = 0; i < 255; i++)
                {
                    int state = GetAsyncKeyState(i);
                    if (state != 0)
                    {
                        string pressedKey= ((System.Windows.Forms.Keys)i).ToString();
                        switch (pressedKey)
                        {

                            default:
                                Console.WriteLine("You have pressed: " + pressedKey);
                                break;
                        }
                    }
                }
            }
        }
    }
}