SANTOSHSGURAV Ответов: 2

Чтение нажатий клавиш с помощью службы windows


Привет Технари,

У меня есть несколько приложений, которые я хочу запустить, когда пользователь нажимает определенные клавиши с клавиатуры, и для этого я хочу использовать метод WndProc.

Я преуспеваю в этом в приложении WinForms. Я хочу разработать службу Windows для достижения этой цели.
Я получаю следующие ошибки при попытке использовать код в службе Windows.

1. RegHotKeys.CreateParams : не найден подходящий метод для переопределения
2. RegHotKeys.WndProc(ref Message) : не найден подходящий метод для переопределения
3. ServiceBase не содержит определения для WndProc
4. ServiceBase не содержит определения для CreateParams

Ниже приведен фрагмент кода:

protected override void WndProc(ref Message keyPressed)
        {
            Keys keyData = ((Keys)((int)((long)keyPressed.WParam))) | Control.ModifierKeys;

            if (keyPressed.LParam.ToInt32() == hotKey1)
            {
               //ACTION 1
            }
            else if (keyPressed.LParam.ToInt32() == hotKey2)
            {
               //ACTION 2
 
            }
            else if (keyPressed.LParam.ToInt32() == hotKey3)
            {
               //ACTION 3
 
            }
            else if (keyPressed.LParam.ToInt32() == hotKey4)
            { 
               //ACTION 4
            }

            base.WndProc(ref keyPressed);
        }

        protected override CreateParams CreateParams
        {
            get
            {
                var cp = base.CreateParams;
                cp.ExStyle |= 0x80;  // Turn on WS_EX_TOOLWINDOW
                return cp;
            }
        }

Итак, может ли кто-нибудь предложить, каким может быть возможное решение этой проблемы, пожалуйста?

Что я уже пробовал:

Я преуспеваю в этом в приложении WinForms.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Ты не можешь.

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


Рейтинг:
1

Richard Deeming

Ты не можешь этого сделать.

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

Придерживайтесь приложения, которое запускается, когда пользователь входит в систему. Если вы хотите, чтобы пользователь мог вызвать ярлык, даже если ваше приложение неактивно, вам нужно будет посмотреть на использование глобального крючка клавиатуры:
Простой Глобальный Низкоуровневый Крючок Клавиатуры C# [^]