Pixel_Guy
@Pixel_Guy
C# программист разрабатывающий игры на unity

Как получать клавиши не фокусируясь на wpf приложении?

Как мне получить вводимые пользователем клавиши через приложение на котором пользователь не сфокусирован ?
Пока, что код выглядит так
void SetAppControls()
            {
                KeyDown += MainWindow_KeyDown;
                KeyDown += ShiftSertchDown;
                KeyUp += ShiftSertchUp;

                void ShiftSertchDown(object sender, KeyEventArgs e)
                {
                    if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
                    {
                        IsShiftPressed = true;
                    }
                }
                void ShiftSertchUp(object sender, KeyEventArgs e)
                {
                    if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
                    {
                        IsShiftPressed = false;
                    }
                }

                void MainWindow_KeyDown(object sender, KeyEventArgs e)
                {
                    if (e.Key == Key.Pause)
                    {
                        CloseW = true;
                        CloseApp();
                    }
                    else if (e.Key == Key.F11)
                    {
                        ArMainWindow.Opacity = 1;
                    }
                    else if (e.Key == Key.F12)
                    {
                        ArMainWindow.Opacity = 0;
                    }
                    else
                    {
                        Input += ProcessInput(e.Key.ToString());
                        Console.Text = Input;
                    }
                }
            }
            void SetStartSettings()
            {
                this.ShowInTaskbar = false;
                Application.Current.Exit += Current_Exit;

                void Current_Exit(object sender, ExitEventArgs e)
                {
                    RestartApp();
                }
            }
        }
        string ProcessInput(string toRep)//File like method
        {
            foreach(string a in File.ReadAllLines("ProcessInput"))
            {
                string[] Replace = a.Split(',');
                toRep = toRep.Replace(Replace[0], Replace[1]);
            }
            if (IsShiftPressed) toRep = toRep.ToUpper();
            else toRep = toRep.ToLower();
            return toRep;
        }
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@Sumor
Можно обрабатывать клавиши, нажатые в вашем приложении, а также, в определённых случаях, можно получать нажатые клавиши из приложений, которые вы запустили из вашего приложения.
Для остальных случаев нужно регистрировать и использовать глобальные хуки со всеми прелестями: отдельная dll, регистрация через администратора и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ЭЛКОМ+ Томск
от 70 000 до 120 000 руб.
ИП Агапов Новосибирск
До 150 000 руб.
Аскон Санкт-Петербург
от 130 000 до 180 000 руб.
21 апр. 2019, в 21:02
1000 руб./за проект
21 апр. 2019, в 19:41
5000 руб./за проект
21 апр. 2019, в 19:20
3500 руб./за проект