创建Windows Service并捕获触摸事件
本文关键字:触摸 事件 Windows Service 创建 | 更新日期: 2023-09-27 18:02:51
我想帮助创建一个Windows服务,可以监听多点触摸事件的发生,拦截他们,然后只是做一些事情与他们(不重要)。我还需要知道如何发送Windows消息到这个服务和代码,以便能够从服务内接收这些消息。
有谁有什么想法吗?我已经写了15年的代码了,但从来没有写过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);
}