wangpeng
(wangpeng)
#1
问题:如何代码判断当前进程是否运行在前台?
问题到这里就结束了,下面的是纯粹凑篇幅和记录笔记
效果图
下面是Tweak代码
#import <UIKit/UIKit.h>
#import <PTFakeTouch/PTFakeTouch.h>
#import <PTFakeTouch/PTFakeMetaTouch.h>
static void Reboot(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
NSLog(@"iOSRE: reboot");
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
// system("reboot");
// [[LLMCMDTool sharedInstance] cmd:@"reboot"];
if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
{
NSLog(@"应用程序在前台");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"我被点击了");
CGPoint point = CGPointMake(200, 300);// 点击的坐标
NSInteger pointId = [PTFakeMetaTouch fakeTouchId:[PTFakeMetaTouch getAvailablePointId] AtPoint:point withTouchPhase:UITouchPhaseBegan];
[PTFakeMetaTouch fakeTouchId:pointId AtPoint:point withTouchPhase:UITouchPhaseEnded];
});
}
#pragma GCC diagnostic pop
}
//%ctor { … }
%ctor {
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, Reboot, CFSTR("com.naken.iosred.reboot"), NULL, CFNotificationSuspensionBehaviorCoalesce);
}
下面是filtter的plsit文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Filter</key>
<dict>
<key>Bundles</key>
<array>
<string>com.apple.backboardd</string>
<string>com.apple.UIKit</string>
<string>com.apple.springboard</string>
</array>
</dict>
</dict>
</plist>
abcc
(abcc)
#2
大哥你会基础的ios开发不?
你注入的代码是运行在宿主app里的,app怎么做到在前台的时候才执行代码,这么简单的问题不用大家教了吧
wangpeng
(wangpeng)
#3
很简单"只需要在点击的时候做出判断当前App是不是在前台然后再执行".我这个是注入的所有App.
abcc
(abcc)
#4
注入所有app跟注入一个app有什么区别?注入的代码还不是各自独立运行的
问题不就转化为:如何判断自己当前是不是在前台
wangpeng
(wangpeng)
#5
那你说下你自己是怎么做的吧看你在其他帖子也在问模拟点击
abcc
(abcc)
#7
就是你这个思路啊
注入所有的app,只在自己处于前台时接收点击指令,退后台时不接收
至于如何实现「如何判断自己当前是不是在前台」,我只说个思路,hook每个app的 setDelegate就可以了
当然这种方式是比较不优雅的,更优雅的方式还没找到
wangpeng
(wangpeng)
#8
你和我的思路确定一样?,我看你上来就喷我,感觉你应该有更好地思路,
abcc
(abcc)
#9
当然一样
喷你是因为你问的问题摸不着北,完全没有直击痛点,哈哈
wangpeng
(wangpeng)
#10
但是这种思路会有个弊端就是有些App会有反注入的处理.注入失败的话就不可以模拟点击了.
狗神写的那个damelon可以全局点击的思路特别不错,
abcc
(abcc)
#11
只能退而求其次了
你说的那种高端的实现方式,谁不想做到呢,能力有限就只能曲线救国搞搞了
wangpeng
(wangpeng)
#12
有没有逆向过触动精灵或者xxtouch之类的产品他们是怎么做的.我大概看了下能力不够看不出来他们是怎么做的
wangpeng
(wangpeng)
#14
百度后的答案
if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
{
NSLog(@"应用程序在前台");
return;
}
abcc
(abcc)
#15
显然能力不够,看不出来
我其实只是个正向的猿,在这里混着玩玩。。。
我记得以前研究SpringBoard
时看到过相关功能,刚才看了一下iOS 11的SpringBoard
头文件,貌似可以通过SBApplication
拿到SBApplicationProcessState
,然后有个foreground
属性
2 个赞