利用python模拟ios屏幕点击器_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

#import

#import

#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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值