Создание службы Windows и захват сенсорных событий Win7 c # - PullRequest
1 голос
/ 21 июля 2011

Я хотел бы помочь в создании службы Windows, которая может прослушивать события Multi-touch, перехватывать их, а затем просто что-то с ними делать (не важно). Мне также нужно знать, как отправлять сообщения Windows в эту службу и код, чтобы можно было получать эти сообщения из службы.

У кого-нибудь есть идеи, пожалуйста?

Я сокращаю код в течение 15 лет, но никогда раньше не писал службы Windows и использую небольшую помощь, чтобы встать на моем пути: (

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Для тех, кто заинтересован, я решил пойти по пути обычного приложения Windows Form, и когда придет время запустить его, for будет невидимым, поэтому будет работать в «фоновом режиме», когда другое приложение мне понадобитсядля связи с запусками.

Мне удалось заставить WndProc (ref Message m) работать, и сообщения принимаются моим приложением, и оно делает то, что ему нужно, согласно отправленным инструкциям..

Например, видимое приложение имеет слайдер с графическим интерфейсом для регулировки громкости.Когда ползунок перемещается, значение этого ползунка отправляется в мое «фоновое» приложение с помощью сообщения Windows, а «фоновое» приложение выполняет необходимые действия для изменения уровня громкости устройства / ПК, а также при запросе уровня громкости.сообщение-обратная связь отправляется запрашивающему приложению, чтобы сообщить ему, какой уровень громкости в настоящее время установлен.

Некоторые примеры кода ниже: -

public const int UI_VOLUME_SET = 1101;
    public const int UI_VOLUME_GET = 1100;
    public const int UI_VOLUME_SET_MUTE_STATUS = 1102;

    public const int UI_BRIGHT_GET = 1201;
    public const int UI_BRIGHT_SET = 1202;

    public const int UI_TERMINATE = 9999;

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]Protected override void WndProc(ref Message m)
    {
        int _exoUI = MessageHelper.FindWindow(null, "MY UI");
        EXOxtenderLibrary.VolumeControl _vol;
        switch (m.Msg)
        {
            case UI_TERMINATE:
                this.Close();
                break;
            case UI_BRIGHT_GET:
                //ADD CODE HERE
                break;

            //case UI_BRIGHT_SET:
            //    //ADD CODE HERE
            //    break;

            case UI_VOLUME_GET:
                _vol = new EXOxtenderLibrary.VolumeControl();
                MessageHelper.PostMessage(_exoUI, 32773, _vol.GetVolume(), _vol.isMute);
                _vol = null;
                break;

            case UI_VOLUME_SET:
                _vol = new EXOxtenderLibrary.VolumeControl();
                _vol.SetVolume(m.WParam.ToInt32());
                MessageHelper.PostMessage(_exoUI, 32773, _vol.GetVolume(), _vol.isMute);
                _vol = null;
                break;

            case UI_VOLUME_SET_MUTE_STATUS:
                _vol = new EXOxtenderLibrary.VolumeControl();
                if (m.WParam == new IntPtr(1))
                { _vol.Mute = true; }
                else
                { _vol.Mute = false; }
                MessageHelper.PostMessage(_exoUI, 32773, _vol.GetVolume(), _vol.isMute);
                _vol = null;
                break;
        }

        base.WndProc(ref m);
    }
1 голос
/ 21 июля 2011

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

...