原文:WPF- 模拟触发Touch Events

基于API:

  [DllImport("User32.dll")]
public static extern bool InitializeTouchInjection(uint maxCount = 256, TouchFeedback feedbackMode = TouchFeedback.DEFAULT); [DllImport("User32.dll")]
public static extern bool InjectTouchInput(int count, [MarshalAs(UnmanagedType.LPArray), In] PointerTouchInfo[] contacts);

实现效果:点击按钮,自动触发TouchDown事件、获取TouchEventArgs参数得到坐标,创建Line并设置X1、Y1属性,紧接着触发TouchMove、TouchUp事件,得到TouchUp的TouchEventArgs设置Line的X2、Y2属性。

private void MainWindow_TouchUp(object sender, TouchEventArgs e)
{
System.Windows.Input.TouchPoint oPos = e.GetTouchPoint(this);
this.ProxyLine.X2 = oPos.Position.X;
this.ProxyLine.Y2 = oPos.Position.Y;
this.GdRootZm.Children.Add(this.ProxyLine);
Console.WriteLine("TouchID " + e.TouchDevice.Id + " TouchUp "
+ oPos.Position.X + " " + oPos.Position.Y);
} private void MainWindow_TouchMove(object sender, TouchEventArgs e)
{
System.Windows.Input.TouchPoint oPos = e.GetTouchPoint(this);
Console.WriteLine("TouchID " + e.TouchDevice.Id + " TouchMove "
+ oPos.Position.X + " " + oPos.Position.Y);
} private Line ProxyLine; private void MainWindow_TouchDown(object sender, TouchEventArgs e)
{
System.Windows.Input.TouchPoint oPos = e.GetTouchPoint(this);
Line oLine = new Line();
oLine.Stroke = new SolidColorBrush(Colors.Red);
oLine.StrokeThickness = 2;
oLine.X1 = oPos.Position.X;
oLine.Y1 = oPos.Position.Y;
this.ProxyLine = oLine;
Console.WriteLine("TouchID " + e.TouchDevice.Id + " TouchDown "
+ oPos.Position.X + " " + oPos.Position.Y);
}

Console Write Result:

  效果图如下:

private void SimulateTouch(int x, int y)
{
// Touch Down Simulate
PointerTouchInfo contact = MakePointerTouchInfo(x, y, 5, 1);
PointerFlags oFlags = PointerFlags.DOWN | PointerFlags.INRANGE | PointerFlags.INCONTACT;
contact.PointerInfo.PointerFlags = oFlags;
bool bIsSuccess = TouchInjector.InjectTouchInput(1, new[] { contact }); // Touch Move Simulate
int nMoveIntervalX = this.GetRandomSeed().Next(-60, 60);
int nMoveIntervalY = this.GetRandomSeed().Next(-60, 60);
contact.Move(nMoveIntervalX, nMoveIntervalY);
oFlags = PointerFlags.INRANGE | PointerFlags.INCONTACT | PointerFlags.UPDATE;
contact.PointerInfo.PointerFlags = oFlags;
TouchInjector.InjectTouchInput(1, new[] { contact }); // Touch Up Simulate
contact.PointerInfo.PointerFlags = PointerFlags.UP;
TouchInjector.InjectTouchInput(1, new[] { contact });
}

 Source Url:https://github.com/DuelCode/TouchSimulate

 Multi Touch Also Support Like this:

private void BdrSimulateZm_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{ // Touch Down Simulate
int x1 = this.GetRandomSeed().Next(50, 1680 - 100);
int y1 = this.GetRandomSeed().Next(50, 1080 - 100);
PointerTouchInfo oContact1 = MakePointerTouchInfo(x1, y1, 5, 1); int x2 = this.GetRandomSeed().Next(50, 1680 - 100);
int y2 = this.GetRandomSeed().Next(50, 1080 - 100);
PointerTouchInfo oContact2 = MakePointerTouchInfo(x2, y2, 5, 1); PointerFlags oFlags = PointerFlags.DOWN | PointerFlags.INRANGE | PointerFlags.INCONTACT;
oContact1.PointerInfo.PointerFlags = oFlags;
oContact2.PointerInfo.PointerFlags = oFlags;
TouchInjector.InjectTouchInput(2, new[] { oContact1, oContact2 }); // Touch Move Simulate
int nMoveIntervalX = this.GetRandomSeed().Next(-60, 60);
int nMoveIntervalY = this.GetRandomSeed().Next(-60, 60);
oContact1.Move(nMoveIntervalX, nMoveIntervalY);
oContact2.Move(nMoveIntervalX, nMoveIntervalY);
oFlags = PointerFlags.INRANGE | PointerFlags.INCONTACT | PointerFlags.UPDATE;
oContact1.PointerInfo.PointerFlags = oFlags;
oContact2.PointerInfo.PointerFlags = oFlags;
TouchInjector.InjectTouchInput(2, new[] { oContact1 , oContact2 }); // Touch Up Simulate
oContact1.PointerInfo.PointerFlags = PointerFlags.UP;
oContact2.PointerInfo.PointerFlags = PointerFlags.UP;
TouchInjector.InjectTouchInput(2, new[] { oContact1, oContact2 });
}

 

WPF- 模拟触发Touch Events的更多相关文章

  1. wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

    原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依 ...

  2. iOS Programming Touch Events and UIResponder

    iOS Programming Touch Events and UIResponder  1 Touch Events  As a subclass of UIResponder, a UIView ...

  3. js模拟触发事件

     html标签元素封装着实用的[事件],但在很多时候,需要[模拟触发事件],比如 [按钮单机事件]  可以实实在在点击按钮触发该事件,但体验而言,很多时候需要js逻辑处理让实现 触发事件的效果这时就用 ...

  4. [React Native] State and Touch Events -- TextInput, TouchableHighLight

    In React, components manage their own state. In this lesson, we'll walk through building a component ...

  5. WPF 模拟UI 键盘录入

    原文:WPF 模拟UI 键盘录入 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1835 ...

  6. WPF模拟探照灯文字

    原文:WPF模拟探照灯文字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1835936 ...

  7. WPF模拟雷达界面效果图

    原文:WPF模拟雷达界面效果图 iPad塔防的防守兵的效果很炫,2个小时用WPF模拟了一个. 效果图: 关键代码: <Grid> <Grid.Background> <I ...

  8. WPF模拟Office2010文件菜单的TabControl模板

    原文:WPF模拟Office2010文件菜单的TabControl模板 这是Office2010中的文件菜单点开后的效果.本文我将以强大的WPF(www.itstrike.cn)来实现类似的效果.希望 ...

  9. wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...

随机推荐

  1. maven pom.xml基本使用方法

    pom.xml文件是Maven进行工作的主要配置文件.在这个文件里我们能够配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:能够配置Maven项目须要 ...

  2. php课程 5-19 php数据结构函数和常用函数有哪些

    php课程 5-19 php数据结构函数和常用函数有哪些 一.总结 一句话总结: 1.php数据结构函数有哪些(四个)? • array_pop();从最后弹出一个值,返回弹出值• array_pus ...

  3. 使用oschina的gitserver

    1.概要 事实上oschina的gitserver与github的几乎相同.只是既然是中国的gitserver,那么速度应该更快一些吧 2.注冊 链接https://git.oschina.net/, ...

  4. 复制相关参数学习笔记--master上的参数

    特别声明: 所有的过滤规则不建议在主库上设置.     server_id 是一个整数,范围:1 至 power(2,32)-1 之间. 推荐使用端口号+ip最后一位的方式. 唯一区别ID,同一个集群 ...

  5. js对时间的操作相关

    摘自网络,我主要用了日期增加若干天之后获得的日期,就是现在是5月2号,我增加30天,应该返回6月几号来着,就是这个意思 用到了Date.prototype.DateAdd 方法,prototype的意 ...

  6. poi读取excell表格

    原文链接:http://blog.csdn.net/qq_37936542/article/details/79024847 最近项目需要实现一个将excell中的数据导入数据库,在网上找到这篇文章, ...

  7. STL map 按key值和按value值排序

    map是用来存放<key, value>键值对的数据结构,能够非常方便高速的依据key查到对应的value. 假如存储水果和其单位价格.我们用map来进行存储就是个不错的选择. 我们这样定 ...

  8. [NativeScript] Create new application and run emulator

    Install: npm i -g nativescript Create: tns create <app_name> --ng Run: tns emulate ios List al ...

  9. scala 主从构造器

    package cn.scala_base.oop.scalaclass /** * 构造器分为两种,一种是主构造器,另一种是从构造器,所有的从构造器必须在其方法体 * 的第一行调用主构造器 * * ...

  10. rac下一个/tmp/bootstrap权限问题

    原创作品,离 "深蓝blog" 博客,欢迎转载,请务必注明转载如下源,否则追究其版权责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...