创建Windows Service并捕获触摸事件

本文关键字:触摸 事件 Windows Service 创建 | 更新日期: 2023-09-27 18:02:51

我想帮助创建一个Windows服务,可以监听多点触摸事件的发生,拦截他们,然后只是做一些事情与他们(不重要)。我还需要知道如何发送Windows消息到这个服务和代码,以便能够从服务内接收这些消息。

有谁有什么想法吗?

我已经写了15年的代码了,但从来没有写过Windows Service,我用了一点帮助来开始我的工作:(

创建Windows Service并捕获触摸事件

根据定义,Windows Services不应该是用户交互的,因此,如果你想获得多点触摸数据,你必须使用WM_TOUCH窗口钩子直接钩入操作系统输入消息,并自己解释该数据。

对于那些感兴趣的人来说,我决定走正常的Windows窗体应用程序的路线,当时间到来时,For将是不可见的,因此当我需要它与之通信的其他应用程序启动时,它将在"后台"运行。

我设法得到WndProc(ref Message m)工作和消息正在被我的应用程序接收,它根据它发送的指令做它需要做的事情。

例如,可见的应用程序有一个GUI滑块用于音量控制。当滑块被移动时,滑块的值通过Windows消息发送到我的"背景"应用程序,"背景"应用程序做必要的改变设备/PC的音量水平,当音量水平被请求时,一个回发消息被发送到请求的应用程序,告诉它当前的音量水平是什么。

下面是一些示例代码:-
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);
    }