`

iOS模拟屏幕点击事件

 
阅读更多

参考:

http://blog.csdn.net/guojin08/article/details/14525881

iOS私有头文件:

https://github.com/kennytm/iphone-private-frameworks

iOS 6.0模拟器的私有库路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/PrivateFrameworks

 

真机iOS7.1系统的私有库路径:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/PrivateFrameworks

 

iPod-5.1.1的私有库路径:

/Users/tangwu/Library/Developer/Xcode/iOS DeviceSupport/5.1.1 (9B206)/Symbols/System/Library/PrivateFrameworks

 

#include <mach/mach_time.h>
#import <objc/message.h>
#import <dlfcn.h>

#import "SsjjSyViewController.h"
#import "GraphicsServices.h"
#import "GraphicsServices.h"

#define SBSERVPATH  "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"


@interface SsjjSyViewController ()

@end


static mach_port_t getFrontMostAppPort() {
    mach_port_t *port;
    void *lib = dlopen(SBSERVPATH, RTLD_LAZY);
    int (*SBSSpringBoardServerPort)() = dlsym(lib, "SBSSpringBoardServerPort");
    port = (mach_port_t *)SBSSpringBoardServerPort();
    dlclose(lib);
    
    void *(*SBFrontmostApplicationDisplayIdentifier)(mach_port_t *port, char *result) = dlsym(lib, "SBFrontmostApplicationDisplayIdentifier");
    char appId[256];
    memset(appId, 0, sizeof(appId));
    SBFrontmostApplicationDisplayIdentifier(port, appId);
    return GSCopyPurpleNamedPort(appId);
}

@implementation SsjjSyViewController


- (void)sendTap : (CGPoint) point{
    [self sendTouchStart:point];
    [self sendTouchEnd:point];
}

- (void)sendTouchStart: (CGPoint) point{
    [self sendEventForPhase:UITouchPhaseBegan point:point];
}

- (void)sendTouchEnd: (CGPoint) point{
    [self sendEventForPhase:UITouchPhaseEnded point:point];
}

- (void)sendEventForPhase: (UITouchPhase)phase
                   point : (CGPoint) point{
    CGPoint adjustedPoint = [self.view convertPoint:point toView:self.view.window];

//    NSLog(@"point : %@ \n NSStringFromCGPoint(adjustedPoint: %@ \n", NSStringFromCGPoint(point), NSStringFromCGPoint(adjustedPoint));
    uint8_t touchEvent[sizeof(GSEventRecord) + sizeof(GSHandInfo) + sizeof(GSPathInfo)];
    struct GSTouchEvent {
        GSEventRecord record;
        GSHandInfo    handInfo;
    } * event = (struct GSTouchEvent*) &touchEvent;
    bzero(event, sizeof(event));
    event->record.type = kGSEventHand;
    event->record.subtype = kGSEventSubTypeUnknown;
    event->record.location = point;
    event->record.timestamp = GSCurrentEventTimestamp();
    event->record.infoSize = sizeof(GSHandInfo) + sizeof(GSPathInfo);
    event->handInfo.type = (phase == UITouchPhaseBegan) ? kGSHandInfoTypeTouchDown : kGSHandInfoTypeTouchUp;
    event->handInfo.pathInfosCount = 1;
    
    bzero(&event->handInfo.pathInfos[0], sizeof(GSPathInfo));
    event->handInfo.pathInfos[0].pathIndex     = 1;
    event->handInfo.pathInfos[0].pathIdentity  = 2;
    event->handInfo.pathInfos[0].pathProximity = (phase == UITouchPhaseBegan) ? 0x03 : 0x00;
    event->handInfo.pathInfos[0].pathLocation  = adjustedPoint;
    
    mach_port_t port = getFrontMostAppPort();
    GSEventRecord* record = (GSEventRecord*)event;
    record->timestamp = GSCurrentEventTimestamp();
    GSSendEvent(record, port);
}







- (void)viewDidLoad
{
    [super viewDidLoad];
    UIButton    *btn1 = [[UIButton alloc] initWithFrame:CGRectMake(40, 40, 200, 100)];
    [btn1 setTitle:@"按钮1" forState:UIControlStateNormal];
    [btn1 setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
    
    [btn1 addTarget:self action:@selector(btn1TouchDown:) forControlEvents:UIControlEventTouchDown];
    [btn1 addTarget:self action:@selector(btn1TouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:btn1];

    UIButton    *btn2 = [[UIButton alloc] initWithFrame:CGRectMake(40, 150, 200, 100)];
    [btn2 setTitle:@"按钮2" forState:UIControlStateNormal];
    [btn2 setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
    
    [btn2 addTarget:self action:@selector(btn2TouchDown:) forControlEvents:UIControlEventTouchDown];
    [btn2 addTarget:self action:@selector(btn2TouchUpInside:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn2];
    


}

- (void) btn1TouchDown: (id) sender
{
    UIButton    *btn1 = (UIButton *) sender;
    [btn1 setHighlighted:YES];

}

- (void) btn1TouchUpInside: (id) sender
{
    UIButton    *btn1 = (UIButton *) sender;
    [btn1 setHighlighted:NO];
    CGPoint     point = CGPointMake(50, 155);
    [self sendTap:point];
}


- (void) btn2TouchDown: (id) sender
{
    NSLog(@"btn2TouchDown\n");
    UIButton    *btn2 = (UIButton *) sender;
    [btn2 setHighlighted:YES];
}

- (void) btn2TouchUpInside: (id) sender
{
    NSLog(@"btn2TouchUpInside\n");
    UIButton    *btn2 = (UIButton *) sender;
    [btn2 setHighlighted:NO];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

分享到:
评论

相关推荐

    PTFakeTouchDemo iOS模拟点击屏幕例子

    iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟...

    ZSFakeTouch iOS模拟点击屏幕

    iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作 iOS模拟点击屏幕,自动化脚本,点击手势等模拟操作

    ios系统点击源码,实现iphone手机上的系统点击事件

    ios系统点击源码,实现iphone手机上的系统点击事件。可以通过发送事件,模拟系统点击。

    python模拟点击在ios中实现的实例讲解

    那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版本,因为经过测试的结果是可以使用的。具体在ios中模拟点击使用的细节大家也可以...

    PTFakeTouch:模拟iOS的触摸事件[用户模式]

    模拟iOS的触摸事件[用户模式] 仅在应用程序中启用,系统触摸模拟库: : 只需构建它,然后将此框架添加到您的项目中即可。 然后就可以使用它了。 附件来自kif。 使用案例 单击屏幕上的一个点 NSInteger ...

    NRTouchPoints, 在屏幕上,模拟用户触摸的UIWindow子类.zip

    NRTouchPoints, 在屏幕上,模拟用户触摸的UIWindow子类 NRTouchPoints我希望能够为我的应用程序的用户录制一个教程。 当我有越狱时,这是可以能的,但是有一个非狱电的电话,这变得复杂了。 我发现的解决方案是使用...

    ios命令行调试工具libimobiledevice详解

    IOS下面也有类似于android平台adb的工具,可以用来查看手机信息,备份,恢复,手机挂在目录等,本文档介绍了常用的几种方法

    Android模拟ios桌面悬浮球功能

    简单实现类似iPhone中桌面辅助按钮功能,可以手指按住拖拽,点击展开功能,点击屏幕任意位置可以消失弹窗。

    适配iOS14下pop多层控制器至首页时,tabbar不显示问题

    此资源是方案二的源码,具体原理分析请看这个文章:https://kunnan.blog.csdn.net/article/details/113176114 ...2.1、 点击屏幕模拟push多层VC 时间间隔 2s,持续3次 2.2、 再次点击pop页面会进行popToRoot操作。

    Tap to Richest 点击成为富人unity休闲模拟点击挂机放置类小游戏项目源码

    用户可以升级他们的业务并点击主屏幕来赚取更多的钱,让他们成为最富有的人。 特征: 一款鼓励用户不断点击以增加收入的点击游戏。 用户可以升级自己的业务以获得更大的成功。 顾问奖金提供有价值的商业奖金。 将您...

    SPDebugMenu:供 iOS 开发人员使用完全可自定义的操作在其应用中显示调试菜单的库

    它支持: 触发它的不同方式:摇动设备、多次点击或长按屏幕。 自定义调试操作。 通过电子邮件发送带有屏幕截图和一些有用信息的报告。 在您的设备中模拟内存警告通知安装使用 CocoaPods 将 SPDebugMenu 添加到您的 ...

    Android-3DTouch-PeekView:简单而强大的库,可在Android上模拟iOS的“ 3D Touch”预览功能

    Android 3D Touch-PeekView iOS使用作为“窥视”完整内容(例如电子邮件,图片,网络搜索等)的方式。尽管它们具有专用于此功能的硬件,但仍然有可能在较长的时间内从Android中获得类似的功能。单击,而不是专用硬件...

    cliclick V4.0.1

    iOS逆向工具Cliclick:Mac 模拟鼠标点击工具。例子(定时点击特定位置,来点击保证Mac永远处于活跃状态,达到mac永不不关闭屏幕的目的) https://blog.csdn.net/z929118967/article/details/108949981

    UIDynamics-Helpers(iPhone源代码)

    来源:github/UIDynamics-HelpeLicence:MIT平台:iOS设备:iPhone / iPad作者:MattFoley  UIDynamics是iOS 7的...测试时点击一下屏幕,就会产生小圆珠坠落碰撞效果。 UIDynamics-Helpers包括两个特性: MFLAlpha

    UIDynamics-Helpers功能

    这是UIDynamics-Helpers功能源码,该源码是UIDynamics是iOS 7的新特性,能够模拟产生物理世界的很多物体运动的动画效果。UIDynamics-Helpers能够让开发者更加简单地利用UIDynamics进行编程。案例中是演示了利用UI...

    按键精灵手机助手 v3.1.2.10708.zip

    4、支持自动点击、多点折线滑动手机屏幕 5、支持自动找图、找色 6、手机设备信息获取、震动控制、文字输入 7、脚本语法基于按键精灵MQ语言,上手简单 8、按键精灵官方出品,正版应用,稳定可靠  按键精灵手机...

    多功能 DLL 动态库

    说明:模拟鼠标点击,参数:x: 点击鼠标的X坐标; y: y坐标;flag: 0,左键单击;1,左键双击;2,右键单击;3右键双击 Long KeySim( int key1,int key2,int key3 ) 说明:模拟按键,参数:key1:按键1;key2:按键2...

    firebird:基于ARM的TI-Nspire计算器的第三方多平台仿真器

    它支持在Android,iOS,Linux,macOS和Windows上模拟Touchpad,TPad CAS,CX和CX CAS calc。 下载: 屏幕截图: Linux: 视窗: Android: 苹果系统: iOS: 建造 首先,您需要安装Qt5。 然后,您可以直接使用...

    详解基于Android的Appium+Python自动化脚本编写

    通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。 下面开始Appium的配置。 appPackage和APPActivity的获取 任意下载一个app 解压 但是解压出来的...

    cloudpilot:将POSE移植到Web

    为了启动仿真器,您需要通过单击或点击“加载ROM或图像”按钮来加载ROM文件。 您需要Palm V或Palm m515的ROM文件。 选择ROM文件后,仿真器将重新加载并开始运行PalmOS。 键盘输入 除了触摸或单击设备屏幕外,您还...

Global site tag (gtag.js) - Google Analytics