如何全局检测点击(触摸输入)而不是鼠标点击?

2024-03-15

我想制作一个当用户触摸屏幕时自动显示的应用程序。它不应该适用于点击。我查找了 Windows 7/8 中的触摸处理程序。但我看到每个触摸窗口都必须用RegisterTouchWindow注册

TL;DR

有没有办法获得窗口外的触摸点位置(全局)?


Windows 8 应用程序不再需要注册 Touch Window。

据我所知,有几种方法可以实现您的目的,但有一些限制。

  1. 这篇文章在这里 http://www.codeproject.com/Articles/381673/Using-the-RawInput-API-to-Process-MultiTouch-Digit适用于 Win 7 和 8。但需要供应商 ID 和触摸屏的产品 ID。您的应用程序可能无法在某些触摸设备上正常运行。

  2. Use 注册指针输入目标 http://msdn.microsoft.com/library/windows/desktop/hh454911%28v=vs.85%29.aspx在Win 8上。从我的调试来看,windows 8的触摸机制有其独特的特点。在触摸按下和触摸抬起之间,所有触摸事件都会发送到接收到第一个触摸事件的窗口,无论该窗口是最小化还是被另一个窗口覆盖,或者后期设置了 WS_EX_TRANSPARENT 属性。如果第一个窗口被销毁,则按下和释放之间的触摸事件只能共享到另一个窗口。使用此 API,所有触摸事件都将发送到注册的窗口。其他窗口无法再接收触摸事件,直到取消注册指针输入目标 http://msdn.microsoft.com/en-us/library/windows/desktop/hh454915%28v=vs.85%29.aspx由注册的窗口调用,或者通过使用将触摸输入注入回系统注入触摸输入 http://msdn.microsoft.com/en-us/library/windows/desktop/hh802881%28v=vs.85%29.aspx。 “注册的输入目标注入的输入不会被拦截。”请注意,使用此 API 需要 UI 访问权限。可以在以下位置找到示例:here http://video.ch9.ms/build/2011/slides/APP-189T_Humphrey.pptx.

  3. 窗户挂钩。对于 Win 7/8 上的桌面应用程序,可以通过使用轻松挂钩触摸事件设置WindowsHookEx http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx与 WH_CALLWNDPROC 或 WH_GETMESSAGE。对于Win 8上的metro应用程序,在窗口的消息循环中只能检测到第一个指针事件。虽然指针事件可以通过单击或点击来发生,获取指针类型 http://msdn.microsoft.com/library/windows/desktop/hh454892%28v=vs.85%29.aspx可以告诉您它是触摸指针还是鼠标指针。使用钩子的示例可以在以下位置找到here http://msdn.microsoft.com/en-us/library/ms644960%28VS.85%29.aspx.

处理指针事件的代码片段:

switch(Msg)  
{  
...  
case WM_POINTERENTER:  
case WM_NCPOINTERDOWN:  
case WM_NCPOINTERUP:  
case WM_NCPOINTERUPDATE:  
case WM_POINTERACTIVATE:  
case WM_POINTERCAPTURECHANGED:  
case WM_POINTERDOWN:  
case WM_POINTERLEAVE:  
case WM_POINTERUP:  
case WM_POINTERUPDATE:  
    {  
        UINT32 pointerId = GET_POINTERID_WPARAM(wParam);  
        POINTER_INPUT_TYPE pointerType;  

        if (GetPointerType(pointerId, &pointerType))  
        {
            if (pointerType == PT_TOUCH)   
            {  
                ...  
            }  
        }  
    }  
    break;  
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何全局检测点击(触摸输入)而不是鼠标点击? 的相关文章

  • 如何让BackgroundWorker返回一个对象

    我需要做RunWorkerAsync 返回一个List
  • 为什么数组不可赋值? [复制]

    这个问题在这里已经有答案了 据我所知 C 标准禁止使用数组作为可修改的左值 即在赋值的左侧 int lhs 4 rhs 4 0 1 2 3 lhs rhs illegal 现在 我一直想知道为什么会这样 我可以看到上面的语句 以及写入数组的
  • 如何在方法模板中使用模板类型的引用传递参数?

    我目前正在努力编译以下代码 首先是包含带有方法模板的类的头文件 ConfigurationContext h class ConfigurationContext public template
  • 起订量工作单元

    我是单元测试的新手 我想为我的搜索功能创建一个测试 我的服务层看起来像 public class EmployeeService BaseService IEmployeeService public EmployeeService IUn
  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • 关于 FirstOrDefault 或 SingleOrDefault

    FirstOrDefault 或 SingleOrDefault 将返回什么类型的数据 假设我的查询返回 3 条记录 例如 empid ename salary 1 joy 1500 2 rob 4500 3 jen 6500 所以如果我们
  • 如何使用 Linq to Sql 修剪值?

    在数据库中 我有一个名为 联系人 的表 名字和其他此类字符串字段设计为使用 Char 数据类型 不是我的数据库设计 我的对象 Contact 映射到属性中的字符串类型 如果我想做一个简单的测试 通过 id 检索 Contact 对象 我会这
  • 如何使用 HttpClient 验证 Pardot API

    我花了大约一天的时间尝试对 Pardot API 进行身份验证 它不喜欢我尝试发布消息正文的方式 所以我想发布对我有用的解决方案 如果您有任何建议或替代方案 我想听听 ServicePointManager SecurityProtocol
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator
  • Sharepoint 的 CAML 查询中的日期时间比较

    我正在尝试从共享点列表中获取某些项目 具体取决于自定义列中的日期 我已经使用 U2U Caml Builder 创建了查询 这很有效 但是当我将其放入 Web 部件中自己的代码中时 它总是返回列表中的所有项目 这是我的代码 DateTime
  • 发送/捕获 SIGTERM 的 Win32 API 模拟

    在 POSIX OS 下 有信号 API 允许向进程发送信号以将其关闭 使用kill 您可以使用sigaction捕获它并执行您需要的操作 然而 Win32不是POSIX系统 所以 如何处理可能出现的关闭事件 例如来自 任务管理器 中的 结
  • AllowUserToAddRows 不适用于 DataGridView 上的 List<> 数据源

    我有一个DataGridView与DataSource set to List
  • 使用客户端 hello 消息进行 TLS 协议检测

    我需要检测网络流量中的 https 数据包 到目前为止 我将所有 443 标记为 https 但我不想再在这种情况下使用端口信息 检查客户端问候消息是否足够 Check 22 and version info 0300 0301 or 03
  • XSD、泛型和 C# 类的困境

    我有以下简单的 XSD 文件
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 在 C# 中设置风扇速度

    我知道以前有人问过这个问题 但我似乎无法让它发挥作用 我已调用以下内容 using System Management using System Management Instrumentation using System Runtime
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6
  • Eclipse (C/C++) 错误:平台关闭后发现作业仍在运行

    当我打开 Eclipse 时 它 在一小时前工作过 但在启动时冻结并给出错误 发生错误 请参阅日志文件 请参阅下面的日志文件 尽管其中一些信息出现在日志中 操作系统 Mac OSX 10 7 5 Eclipse 面向 C C 开发人员的 E

随机推荐